Skip to main content
Glama

reference_get

Read-onlyIdempotent

Read this server's own documentation: the block types, form field types, result blocks, palette values and response shapes the other tools expect. Every "riddle://reference/..." URI named in a tool description, a response or an error message is a topic of this tool - pass it here to read that document. These are the authoritative parameter reference for the riddle_builder_* and palette_* tools: read the relevant one BEFORE the first call instead of guessing property names, and re-read it when a call fails with a VALIDATION_ERROR. Up to 3 topics per call, and only the ones you need - most are long. Which topics exist, and what each one holds, is the "topics" parameter's own enum and description - not repeated here.

"riddleType", "blockTypes" and "fieldTypes" narrow a document to your own material, and are ignored - whole document returned, stated in the response - on one that has no such split. block-types is never returned unscoped: {"riddleType": ["Quiz"]} is still all thirteen of a Quiz's block types (~20 KB), so name the ones you are about to build in "blockTypes" (a Quiz filtered to ["SingleChoice"]: ~5.5 KB, and it says everything about that block the wide read does). Decide the blocks first, then read only those. "fieldTypes" does the same for form-field-types and form-field-defaults, so reading both of them with {"fieldTypes": ["Dropdown"]} is the complete reference for one field type and nothing else. The per-entity families need no filter at all - riddle://reference/block-defaults/SingleChoice IS the filtered read.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "topics": "<topics>"
    },
    "name": "reference_get"
  }
}

Input Schema

NameRequiredDescriptionDefault
topicsYesThe documents to read, as their "riddle://reference/..." URIs (a document's short resource name, e.g. "block-types", works too). What each one holds: - riddle://reference/index: every document this server has, with its exact size. Read this first when you do not know which of the others you need - it is by far the smallest, and the one place the member names of the {...} families below are listed. - riddle://reference/getting-started: what this server is for, the authentication model, the guided prompts, and the addresses of the documents that hold the rules. Start here when unsure which tool to use. - riddle://reference/prompts/{prompt} (one per guided prompt, e.g. riddle://reference/prompts/build_LeadGenQuiz): the playbook for a whole goal - what to ask the user first, the tool calls in order, what to verify, the traps. Read one when the user states a GOAL rather than an operation. - riddle://reference/response-format: the envelope every Riddle-returning tool answers with, plus the list, bulk and error shapes. - riddle://reference/riddle-builder/riddle-types: all 9 Riddle types with their required/optional build fields and result structure. - riddle://reference/riddle-builder/block-types: every question and content block type - the reference for the "blocks" of a riddle_builder_* call. Returned scoped only, and worth scoping twice (see "blockTypes"). - riddle://reference/riddle-builder/form-field-types and .../result-blocks: the 19 form field types of the FormBuilder block, and the 12 result page block types with their format and styling options. - riddle://reference/concepts/{concept} (one per subject, e.g. riddle://reference/concepts/merge-semantics): how an edit merges, the "preset" and "publish" objects, branching logic, defaults, bulk calls, move restrictions, limits, troubleshooting. - riddle://reference/block-defaults/{blockType}, riddle://reference/riddle-defaults/{riddleType}, riddle://reference/form-field-defaults, riddle://reference/publish-defaults: what a read-back leaves out for still being at its default, and what that default is. Read riddle://reference/concepts/defaults once for how to use them. - riddle://reference/palette/fields, .../built-in-palettes, .../fonts: every palette value palette_customize accepts and where it shows up, the built-in palettes to start from, the available font families. - riddle://reference/question-bank/overview: what a question bank is, its draft/publish model, and how its items relate to a QuestionBank block - read before the first question_bank_create.
blockTypesNoThe block type name(s) you are actually going to build (e.g. "SingleChoice", "WheelSpinner"), narrowing block-types on top of whatever "riddleType" kept - the normal way to read that document, not an optimization for later: pass the two or three the Riddle needs, and come back for another. The names are deliberately not enumerated here (dozens of them, on a schema every agent reads every turn); an unknown one, or a real one outside the Riddle type(s) you filtered to, is rejected with the names that are valid for your situation. Omit for every block type.
fieldTypesNoNarrow form-field-types and form-field-defaults to these form field type name(s) (e.g. "Dropdown", "Privacy"); the property sets a kept type refers to (propertySets/commonProperties) and the "fields" usage notes always come with it. Not enumerated here for the same reason "blockTypes" is not - an unknown one is rejected with the full list. Ignored on every other topic. Omit for every field type.
riddleTypeNoNarrow riddle-types/block-types to these Riddle type(s) - on block-types that drops every other type's question blocks while keeping the shared conventions (commonBlockProperties, the general Content/Ad/Quote blocks). REQUIRED on block-types unless "blockTypes" is given instead, and only the WIDE scope of it. Ignored on a topic with no per-type split, and not applicable to the block-defaults/riddle-defaults families - read the entity's own address there. Omit for every type.
includeAvailableTopicsNoWhether to carry the full "availableTopics" catalogue. Omit it - the first reference_get of a session gets it, later ones get a pointer instead of repeating ~2.5 KB you already have. true gets it again (a fresh conversation on an existing session), false never pays for it.

Output Schema

NameRequiredDescriptionDefault
referencesYesOne entry per requested topic, in the order requested.
availableTopicsYesEvery topic this tool can return, uri => {sizeBytes, summary} - sent in full on the FIRST reference_get of a session, then replaced by a short {omitted, namesAndSizesIn, resend} pointer ("includeAvailableTopics" overrides both directions). The generated families are compacted under "families" - the address template, how many addresses and what they cost in total, the individual names being in riddle://reference/index. Build one by replacing a "uriTemplate" variable with your entity, e.g. riddle://reference/block-defaults/Flashcard.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / topics / description
      Previous value: -"The documents to read, as their \"riddle://reference/...\" URIs (a document's short resource name, e.g. \"block-types\", works too). What each one holds:\n- riddle://reference/index: every document this server has, with its exact size. Read this first when you do not know which of the others you need - it is by far the smallest, and the one place the member names of the {...} families below are listed.\n- riddle://reference/getting-started: what this server is for, the authentication model, the guided prompts, and the addresses of the documents that hold the rules. Start here when unsure which tool to use.\n- riddle://reference/prompts/{prompt} (one per guided prompt, e.g. riddle://reference/prompts/build_LeadGenQuiz): the playbook for a whole goal - what to ask the user first, the tool calls in order, what to verify, the traps. Read one when the user states a GOAL rather than an operation.\n- riddle://reference/response-format: the envelope every Riddle-returning tool answers with, plus the list, bulk and error shapes.\n- riddle://reference/riddle-builder/riddle-types: all 9 Riddle types with their required/optional build fields and result structure.\n- riddle://reference/riddle-builder/block-types: every question and content block type - the reference for the \"blocks\" of a riddle_builder_* call. Returned scoped only, and worth scoping twice (see \"blockTypes\").\n- riddle://reference/riddle-builder/form-field-types and .../result-blocks: the 18 form field types of the FormBuilder block, and the 12 result page block types with their format and styling options.\n- riddle://reference/concepts/{concept} (one per subject, e.g. riddle://reference/concepts/merge-semantics): how an edit merges, the \"preset\" and \"publish\" objects, branching logic, defaults, bulk calls, move restrictions, limits, troubleshooting.\n- riddle://reference/block-defaults/{blockType}, riddle://reference/riddle-defaults/{riddleType}, riddle://reference/form-field-defaults, riddle://reference/publish-defaults: what a read-back leaves out for still being at its default, and what that default is. Read riddle://reference/concepts/defaults once for how to use them.\n- riddle://reference/palette/fields, .../built-in-palettes, .../fonts: every palette value palette_customize accepts and where it shows up, the built-in palettes to start from, the available font families.\n- riddle://reference/question-bank/overview: what a question bank is, its draft/publish model, and how its items relate to a QuestionBank block - read before the first question_bank_create."New value: +"The documents to read, as their \"riddle://reference/...\" URIs (a document's short resource name, e.g. \"block-types\", works too). What each one holds:\n- riddle://reference/index: every document this server has, with its exact size. Read this first when you do not know which of the others you need - it is by far the smallest, and the one place the member names of the {...} families below are listed.\n- riddle://reference/getting-started: what this server is for, the authentication model, the guided prompts, and the addresses of the documents that hold the rules. Start here when unsure which tool to use.\n- riddle://reference/prompts/{prompt} (one per guided prompt, e.g. riddle://reference/prompts/build_LeadGenQuiz): the playbook for a whole goal - what to ask the user first, the tool calls in order, what to verify, the traps. Read one when the user states a GOAL rather than an operation.\n- riddle://reference/response-format: the envelope every Riddle-returning tool answers with, plus the list, bulk and error shapes.\n- riddle://reference/riddle-builder/riddle-types: all 9 Riddle types with their required/optional build fields and result structure.\n- riddle://reference/riddle-builder/block-types: every question and content block type - the reference for the \"blocks\" of a riddle_builder_* call. Returned scoped only, and worth scoping twice (see \"blockTypes\").\n- riddle://reference/riddle-builder/form-field-types and .../result-blocks: the 19 form field types of the FormBuilder block, and the 12 result page block types with their format and styling options.\n- riddle://reference/concepts/{concept} (one per subject, e.g. riddle://reference/concepts/merge-semantics): how an edit merges, the \"preset\" and \"publish\" objects, branching logic, defaults, bulk calls, move restrictions, limits, troubleshooting.\n- riddle://reference/block-defaults/{blockType}, riddle://reference/riddle-defaults/{riddleType}, riddle://reference/form-field-defaults, riddle://reference/publish-defaults: what a read-back leaves out for still being at its default, and what that default is. Read riddle://reference/concepts/defaults once for how to use them.\n- riddle://reference/palette/fields, .../built-in-palettes, .../fonts: every palette value palette_customize accepts and where it shows up, the built-in palettes to start from, the available font families.\n- riddle://reference/question-bank/overview: what a question bank is, its draft/publish model, and how its items relate to a QuestionBank block - read before the first question_bank_create."
  2. Changed8 schema fields changed
    • changedInput schema / properties / blockTypes / description
      Previous value: -"Narrow block-types further, to these block type name(s) (e.g. \"SingleChoice\", \"WheelSpinner\"), on top of whatever \"riddleType\" already kept. Names are NOT enumerated here - there are dozens across 9 Riddle types, and this schema is read by every agent on every turn regardless of whether it filters. An unknown name, or one that exists but is not part of the Riddle type(s) you filtered to, is rejected and the error names the valid names for your situation. Omit for every block type."New value: +"The block type name(s) you are actually going to build (e.g. \"SingleChoice\", \"WheelSpinner\"), narrowing block-types on top of whatever \"riddleType\" kept - the normal way to read that document, not an optimization for later: pass the two or three the Riddle needs, and come back for another. The names are deliberately not enumerated here (dozens of them, on a schema every agent reads every turn); an unknown one, or a real one outside the Riddle type(s) you filtered to, is rejected with the names that are valid for your situation. Omit for every block type."
    • changedInput schema / properties / fieldTypes / description
      Previous value: -"Narrow form-field-types down to these form field type name(s) (e.g. \"Dropdown\", \"Privacy\"). The property sets a kept field type refers to (propertySets/commonProperties) and the \"fields\" usage notes are always returned with it. Names are NOT enumerated here for the same reason \"blockTypes\" does not enumerate its own - an unknown one is rejected with the full list of the 18 valid names. Ignored on every other topic. Omit for every field type."New value: +"Narrow form-field-types and form-field-defaults to these form field type name(s) (e.g. \"Dropdown\", \"Privacy\"); the property sets a kept type refers to (propertySets/commonProperties) and the \"fields\" usage notes always come with it. Not enumerated here for the same reason \"blockTypes\" is not - an unknown one is rejected with the full list. Ignored on every other topic. Omit for every field type."
    • changedInput schema / properties / includeAvailableTopics / description
      Previous value: -"Whether the response should carry the full \"availableTopics\" catalogue. Omit it: the first reference_get of a session gets the catalogue, every call after it gets a one-line pointer back to it instead of repeating ~2.5 KB you already have - which on a small document is several times the document itself. Pass true to get it again (a fresh conversation on an existing session, or after losing it), false to never pay for it."New value: +"Whether to carry the full \"availableTopics\" catalogue. Omit it - the first reference_get of a session gets it, later ones get a pointer instead of repeating ~2.5 KB you already have. true gets it again (a fresh conversation on an existing session), false never pays for it."
    • changedInput schema / properties / riddleType / description
      Previous value: -"Narrow riddle-types/block-types down to these Riddle type(s) - e.g. [\"Quiz\"] on block-types drops every other type's question blocks while keeping the shared conventions (commonBlockProperties, the general Content/Ad/Quote blocks, ...). Ignored, with the whole document returned, on a topic that has no per-type split (form-field-types, result-blocks, concepts/defaults, the palette/question-bank documents). Not applicable to the block-defaults/riddle-defaults families - read the entity's own address instead. Omit for every type."New value: +"Narrow riddle-types/block-types to these Riddle type(s) - on block-types that drops every other type's question blocks while keeping the shared conventions (commonBlockProperties, the general Content/Ad/Quote blocks). REQUIRED on block-types unless \"blockTypes\" is given instead, and only the WIDE scope of it. Ignored on a topic with no per-type split, and not applicable to the block-defaults/riddle-defaults families - read the entity's own address there. Omit for every type."
    • changedInput schema / properties / topics / description
      Previous value: -"The reference documents to read, as their \"riddle://reference/...\" URIs."New value: +"The documents to read, as their \"riddle://reference/...\" URIs (a document's short resource name, e.g. \"block-types\", works too). What each one holds:\n- riddle://reference/index: every document this server has, with its exact size. Read this first when you do not know which of the others you need - it is by far the smallest, and the one place the member names of the {...} families below are listed.\n- riddle://reference/getting-started: what this server is for, the authentication model, the guided prompts, and the addresses of the documents that hold the rules. Start here when unsure which tool to use.\n- riddle://reference/prompts/{prompt} (one per guided prompt, e.g. riddle://reference/prompts/build_LeadGenQuiz): the playbook for a whole goal - what to ask the user first, the tool calls in order, what to verify, the traps. Read one when the user states a GOAL rather than an operation.\n- riddle://reference/response-format: the envelope every Riddle-returning tool answers with, plus the list, bulk and error shapes.\n- riddle://reference/riddle-builder/riddle-types: all 9 Riddle types with their required/optional build fields and result structure.\n- riddle://reference/riddle-builder/block-types: every question and content block type - the reference for the \"blocks\" of a riddle_builder_* call. Returned scoped only, and worth scoping twice (see \"blockTypes\").\n- riddle://reference/riddle-builder/form-field-types and .../result-blocks: the 18 form field types of the FormBuilder block, and the 12 result page block types with their format and styling options.\n- riddle://reference/concepts/{concept} (one per subject, e.g. riddle://reference/concepts/merge-semantics): how an edit merges, the \"preset\" and \"publish\" objects, branching logic, defaults, bulk calls, move restrictions, limits, troubleshooting.\n- riddle://reference/block-defaults/{blockType}, riddle://reference/riddle-defaults/{riddleType}, riddle://reference/form-field-defaults, riddle://reference/publish-defaults: what a read-back leaves out for still being at its default, and what that default is. Read riddle://reference/concepts/defaults once for how to use them.\n- riddle://reference/palette/fields, .../built-in-palettes, .../fonts: every palette value palette_customize accepts and where it shows up, the built-in palettes to start from, the available font families.\n- riddle://reference/question-bank/overview: what a question bank is, its draft/publish model, and how its items relate to a QuestionBank block - read before the first question_bank_create."
    • changedInput schema / properties / topics / items / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "riddle://reference/index",
      -      "riddle://reference/getting-started",
      -      "riddle://reference/response-format",
      -      "riddle://reference/riddle-builder/riddle-types",
      -      "riddle://reference/riddle-builder/block-types",
      -      "riddle://reference/riddle-builder/form-field-types",
      -      "riddle://reference/riddle-builder/result-blocks",
      -      "riddle://reference/palette/fields",
      -      "riddle://reference/palette/built-in-palettes",
      -      "riddle://reference/palette/fonts",
      -      "riddle://reference/publish-defaults",
      -      "riddle://reference/form-field-defaults",
      -      "riddle://reference/question-bank/overview"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "pattern": "^riddle://reference/(block-defaults|riddle-defaults|concepts)/[^/]+$",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "riddle://reference/index",
      +      "riddle://reference/getting-started",
      +      "riddle://reference/response-format",
      +      "riddle://reference/riddle-builder/riddle-types",
      +      "riddle://reference/riddle-builder/block-types",
      +      "riddle://reference/riddle-builder/form-field-types",
      +      "riddle://reference/riddle-builder/result-blocks",
      +      "riddle://reference/palette/fields",
      +      "riddle://reference/palette/built-in-palettes",
      +      "riddle://reference/palette/fonts",
      +      "riddle://reference/publish-defaults",
      +      "riddle://reference/form-field-defaults",
      +      "riddle://reference/question-bank/overview",
      +      "riddle://reference/question-bank/block-type-columns"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^riddle://reference/(block-defaults|riddle-defaults|concepts|prompts)/[^/]+$",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / topics / maxItems
      Previous value: -8New value: +3
    • changedOutput schema / properties / availableTopics / description
      Previous value: -"Every topic this tool can return - sent in full on the FIRST reference_get of a session only, so a client that reached this tool without reading its schema still learns what else is documented and what reading it would cost. Later calls carry a short {omitted, namesAndSizesIn, resend} pointer instead of repeating ~2.5 KB the caller already has; \"includeAvailableTopics\" overrides both directions. In the full form the static documents are listed as uri => {sizeBytes, summary}, same as riddle://reference/index and what resources/list advertises as \"size\". The two generated families (block-defaults, riddle-defaults - one address per entity) are compacted under \"families\": the address template, how many addresses it has and what they cost in total, without the individual names - those, with their exact sizes, are in riddle://reference/index. An address is built by replacing the {variable} of a \"uriTemplate\" with the entity you are working on, e.g. riddle://reference/block-defaults/Flashcard."New value: +"Every topic this tool can return, uri => {sizeBytes, summary} - sent in full on the FIRST reference_get of a session, then replaced by a short {omitted, namesAndSizesIn, resend} pointer (\"includeAvailableTopics\" overrides both directions). The generated families are compacted under \"families\" - the address template, how many addresses and what they cost in total, the individual names being in riddle://reference/index. Build one by replacing a \"uriTemplate\" variable with your entity, e.g. riddle://reference/block-defaults/Flashcard."
  3. Changed2 schema fields changed
    • addedInput schema / properties / includeAvailableTopics
      Added value: +{
      +  "default": null,
      +  "description": "Whether the response should carry the full \"availableTopics\" catalogue. Omit it: the first reference_get of a session gets the catalogue, every call after it gets a one-line pointer back to it instead of repeating ~2.5 KB you already have - which on a small document is several times the document itself. Pass true to get it again (a fresh conversation on an existing session, or after losing it), false to never pay for it.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / availableTopics / description
      Previous value: -"Every topic this tool can return. The static documents are listed as uri => {sizeBytes, summary}, same as riddle://reference/index and what resources/list advertises as \"size\". The two generated families (block-defaults, riddle-defaults - one address per entity) are compacted under \"families\": the address template, how many addresses it has and what they cost in total, without the individual names - those, with their exact sizes, are in riddle://reference/index. An address is built by replacing the {variable} of a \"uriTemplate\" with the entity you are working on, e.g. riddle://reference/block-defaults/Flashcard. Repeated in the response so a client that reached this tool without reading its schema still learns what else is documented - and what reading it would cost, so the next call can be planned instead of guessed."New value: +"Every topic this tool can return - sent in full on the FIRST reference_get of a session only, so a client that reached this tool without reading its schema still learns what else is documented and what reading it would cost. Later calls carry a short {omitted, namesAndSizesIn, resend} pointer instead of repeating ~2.5 KB the caller already has; \"includeAvailableTopics\" overrides both directions. In the full form the static documents are listed as uri => {sizeBytes, summary}, same as riddle://reference/index and what resources/list advertises as \"size\". The two generated families (block-defaults, riddle-defaults - one address per entity) are compacted under \"families\": the address template, how many addresses it has and what they cost in total, without the individual names - those, with their exact sizes, are in riddle://reference/index. An address is built by replacing the {variable} of a \"uriTemplate\" with the entity you are working on, e.g. riddle://reference/block-defaults/Flashcard."
  4. Changed9 schema fields changed
    • changedInput schema / properties / blockTypes / description
      Previous value: -"Narrow block-types/block-defaults further, to these block type name(s) (e.g. \"SingleChoice\", \"WheelSpinner\"), on top of whatever \"riddleType\" already kept. Names are NOT enumerated here - there are dozens across 9 Riddle types, and this schema is read by every agent on every turn regardless of whether it filters. An unknown name, or one that exists but is not part of the Riddle type(s) you filtered to, is rejected and the error names the valid names for your situation. Omit for every block type."New value: +"Narrow block-types further, to these block type name(s) (e.g. \"SingleChoice\", \"WheelSpinner\"), on top of whatever \"riddleType\" already kept. Names are NOT enumerated here - there are dozens across 9 Riddle types, and this schema is read by every agent on every turn regardless of whether it filters. An unknown name, or one that exists but is not part of the Riddle type(s) you filtered to, is rejected and the error names the valid names for your situation. Omit for every block type."
    • removedInput schema / properties / omit
      Removed value: -{
      -  "default": null,
      -  "description": "Leaves parts of a document out instead of narrowing it. The only value with anything to leave out here is \"commonDefaults\", on block-defaults: its shared-defaults map is not itself scoped to a Riddle type or block type, so \"riddleType\"/\"blockTypes\" alone cannot always shrink it (an unfiltered call, or one whose kept blocks still reference most of it, keeps the whole map either way) - \"omit\": [\"commonDefaults\"] drops it outright. Nothing about a kept Riddle type or block type is lost by dropping it: their \"sharedDefaults\" lists still name what they need, \"filtered.omitted\" reports the drop the same way every other omission is reported, and the document itself says to call reference_get again (without this omit, or with a narrower riddleType/blockTypes) to get those names' actual values back. Ignored on every other topic. Omit for the complete document.",
      -  "items": {
      -    "enum": [
      -      "commonDefaults"
      -    ],
      -    "type": "string"
      -  },
      -  "type": "array",
      -  "uniqueItems": true
      -}
    • changedInput schema / properties / riddleType / description
      Previous value: -"Narrow riddle-types/block-types/block-defaults down to these Riddle type(s) - e.g. [\"Quiz\"] on block-types drops every other type's question blocks while keeping the shared conventions (commonBlockProperties, the general Content/Ad/Quote blocks, ...). Ignored, with the whole document returned, on a topic that has no per-type split (form-field-types, result-blocks, the palette/question-bank documents). Omit for every type."New value: +"Narrow riddle-types/block-types down to these Riddle type(s) - e.g. [\"Quiz\"] on block-types drops every other type's question blocks while keeping the shared conventions (commonBlockProperties, the general Content/Ad/Quote blocks, ...). Ignored, with the whole document returned, on a topic that has no per-type split (form-field-types, result-blocks, concepts/defaults, the palette/question-bank documents). Not applicable to the block-defaults/riddle-defaults families - read the entity's own address instead. Omit for every type."
    • addedInput schema / properties / topics / items / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "riddle://reference/index",
      +      "riddle://reference/getting-started",
      +      "riddle://reference/response-format",
      +      "riddle://reference/riddle-builder/riddle-types",
      +      "riddle://reference/riddle-builder/block-types",
      +      "riddle://reference/riddle-builder/form-field-types",
      +      "riddle://reference/riddle-builder/result-blocks",
      +      "riddle://reference/palette/fields",
      +      "riddle://reference/palette/built-in-palettes",
      +      "riddle://reference/palette/fonts",
      +      "riddle://reference/publish-defaults",
      +      "riddle://reference/form-field-defaults",
      +      "riddle://reference/question-bank/overview"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^riddle://reference/(block-defaults|riddle-defaults|concepts)/[^/]+$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / topics / items / enum
      Removed value: -[
      -  "riddle://reference/getting-started",
      -  "riddle://reference/response-format",
      -  "riddle://reference/riddle-builder/riddle-types",
      -  "riddle://reference/riddle-builder/block-types",
      -  "riddle://reference/riddle-builder/block-defaults",
      -  "riddle://reference/riddle-builder/form-field-types",
      -  "riddle://reference/riddle-builder/result-blocks",
      -  "riddle://reference/palette/fields",
      -  "riddle://reference/palette/built-in-palettes",
      -  "riddle://reference/palette/fonts",
      -  "riddle://reference/question-bank/overview"
      -]
    • removedInput schema / properties / topics / items / type
      Removed value: -"string"
    • changedInput schema / properties / topics / maxItems
      Previous value: -4New value: +8
    • changedOutput schema / properties / availableTopics / description
      Previous value: -"Every topic this tool can return, as uri => summary. Repeated in the response so a client that reached this tool without reading its schema still learns what else is documented."New value: +"Every topic this tool can return. The static documents are listed as uri => {sizeBytes, summary}, same as riddle://reference/index and what resources/list advertises as \"size\". The two generated families (block-defaults, riddle-defaults - one address per entity) are compacted under \"families\": the address template, how many addresses it has and what they cost in total, without the individual names - those, with their exact sizes, are in riddle://reference/index. An address is built by replacing the {variable} of a \"uriTemplate\" with the entity you are working on, e.g. riddle://reference/block-defaults/Flashcard. Repeated in the response so a client that reached this tool without reading its schema still learns what else is documented - and what reading it would cost, so the next call can be planned instead of guessed."
    • changedOutput schema / properties / references / items / properties / filtered / description
      Previous value: -"Always present, even when no scoping was requested. {riddleType, blockTypes, fieldTypes, omit: the values you sent (or [] if you sent none); applied: whether this document was actually narrowed down or had something omitted; omitted: {\"<bucket>\": <count dropped>, ...}; note: a plain-language explanation, including why nothing was narrowed on a document with no per-type split, and - on block-defaults with \"omit\": [\"commonDefaults\"] - that the drop was requested rather than narrowed away."New value: +"Always present, even when no scoping was requested. {riddleType, blockTypes, fieldTypes: the values you sent (or [] if you sent none); applied: whether this document was actually narrowed down; omitted: {\"<bucket>\": <count dropped>, ...}; note: a plain-language explanation, including why nothing was narrowed on a document with no per-type split."
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations (readOnly, idempotent, non-destructive, closed-world) are fully consistent, and the description adds behavior they don't cover: documents are long and cost real context (~20 KB unscoped block-types vs ~5.5 KB scoped), filters are silently ignored on topics with no per-type split ('whole document returned, stated in the response'), and the availableTopics catalogue is delivered once per session (~2.5 KB) unless overridden. This is exactly the context an agent needs to avoid blowing its window.

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?

Purpose is front-loaded in the first clause, and the sizing advice plus the scoping workflow are genuinely load-bearing. The closing paragraph is dense and slightly tangled (the riddleType/blockTypes/filtering interplay in one block), costing some readability, but no sentence is filler.

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 documentation-fetch tool with an output schema and full annotation coverage, nothing an agent needs is missing: it knows what the tool returns, how large it will be, how to scope it, and when to reach for it versus guessing or retrying a failed call.

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?

Schema coverage is 100% and the topics enum already enumerates every document, so the baseline is 3. The description nevertheless adds cross-parameter semantics the schema does not spell out as clearly — that block-types is never returned unscoped and must be narrowed via blockTypes, that fieldTypes covers both form-field-types and form-field-defaults in one read, and that the per-entity families need no filter because the address itself is the filter.

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 and resource — 'Read this server's own documentation' — and immediately enumerates what the documents contain (block types, form field types, result blocks, palette values, response shapes). It explicitly frames itself as the authoritative parameter reference for the riddle_builder_* and palette_* siblings, so an agent can tell it apart from every other tool in the list without opening a 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 concrete when-to-use rules: read the relevant topic BEFORE the first call rather than guessing property names, and re-read it on a VALIDATION_ERROR. It also routes by situation — read the index when you don't know which topic you need, getting-started when unsure which tool to use, a prompts/* playbook when the user states a GOAL rather than an operation — and warns to pass only the topics actually needed because most are long.

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.

Resources