このMCPでできること
Builds, edits, publishes, embeds, and analyzes quizzes, polls, forms, personality tests, and related question banks.
ツール
入力スキーマ
{'type': 'object', 'required': ['mediaId'], 'properties': {'mediaId': {'type': 'integer', 'description': 'The media library id of the file to delete - the "mediaId" the upload response returned, or the id shown for the file in the Creator\'s media library.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['riddleUUID', 'values'], 'properties': {'select': {'type': ['null', 'boolean'], 'default': None, 'description': 'Select the palette afterwards so the Riddle actually renders with it. Newly created palettes are always selected.'}, 'values': {'type': 'object', 'description': 'Map of palette path => new value, e.g. {"bgColor": "#ffffff", "buttonColor": "rgba(0,0,0,0.8)", "font.name": "Roboto", "riddleBorderRadius": 12, "isImageInBgDisplayed": true}. Every path must be one of the paths listed in riddle://reference/palette/fields.', 'additionalProperties': True}, 'riddleUUID': {'type': 'string', 'description': 'The UUID of the Riddle you want to restyle. Only Riddles created via the Riddle Builder tools or generated by the Riddle AI can be restyled.'}, 'paletteUUID': {'type': ['null', 'string'], 'default': None, 'description': 'The palette to change. Omit to change the currently selected palette. Pass a built-in id ("default:timeless") to start from that palette.'}, 'newPaletteName': {'type': ['null', 'string'], 'default': None, 'description': 'Create a new palette with this name (copied from paletteUUID / the selected palette) and apply the values to the copy, leaving the original untouched.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['riddleUUID'], 'properties': {'omit': {'type': 'array', 'items': {'enum': ['paletteValues', 'builtInPalettes', 'customizedValues', 'hints'], 'type': 'string'}, 'default': None, 'description': 'Leaves parts of the response out - the way to keep this call small. "paletteValues" lists every palette as {uuid, name} instead of with its ~30 values (then read the one you want with paletteUUID); "builtInPalettes", "customizedValues" and "hints" drop those keys entirely. Omit the parameter for the full response. Whatever you leave out is echoed back under "omittedFields", so a missing key never means the Riddle has none of it.', 'uniqueItems': True}, 'riddleUUID': {'type': 'string', 'description': 'The UUID of the Riddle whose palettes you want'}, 'paletteUUID': {'type': ['null', 'string'], 'default': None, 'description': 'Return only this palette instead of all of them. Accepts a palette UUID or a built-in palette id like "default:timeless".'}, 'includeBuiltInPalettes': {'type': ['null', 'boolean'], 'default': False, 'description': 'Include the full values of all built-in palettes. Defaults to false, in which case only their ids and names are listed.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'The response message.'}}}
入力スキーマ
{'type': 'object', 'required': ['projectId'], 'properties': {'projectId': {'type': 'integer', 'description': 'The ID of the project to look up'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['projectId'], 'properties': {'projectId': {'type': 'integer', 'description': 'The ID of the project whose default Riddle settings to return'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'page': {'type': ['null', 'integer'], 'default': None, 'description': 'Page number to fetch (1-indexed). Defaults to 1. Zero, negative or non-numeric is rejected, not clamped.'}, 'pageSize': {'type': ['null', 'integer'], 'default': None, 'description': 'How many projects to return per page (max 100). Defaults to 25. Same validation as page; over 100 is rejected, not clamped.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['riddleType'], 'properties': {'title': {'type': ['null', 'string'], 'default': None, 'description': 'The bank\'s title. Defaults to "New question bank" when omitted.'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID to create the bank in, as returned by project_list. Omit for the project the API key is scoped to (your personal space on a user API key).'}, 'riddleType': {'type': 'string', 'description': 'The Riddle type this bank\'s items are shaped for - "Quiz" or "Poll". Fixed for the lifetime of the bank; every item added later must match it.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId', 'target'], 'properties': {'target': {'enum': ['bank', 'item'], 'type': 'string', 'description': 'What to delete: "bank" (the bank itself and every item in it) or "item" (one question of it).'}, 'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank to delete, or of the bank the item belongs to.'}, 'questionBankItemId': {'type': ['null', 'integer'], 'default': None, 'description': 'The ID of the item to delete, as returned by question_bank_get_items or question_bank_item(action: "add"). Required for target "item", rejected for "bank".'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId'], 'properties': {'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank to discard the unpublished changes of.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId'], 'properties': {'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank to retrieve, as returned by question_bank_create/question_bank_list - or of a built-in template from question_bank_list(scope: "templates").'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId'], 'properties': {'page': {'type': ['null', 'integer'], 'default': None, 'description': 'Page number, starting at 1 (default: 1).'}, 'search': {'type': ['null', 'string'], 'default': None, 'description': 'Filter items by their column values (e.g. a question title or a choice).'}, 'category': {'type': ['null', 'string'], 'default': None, 'description': 'Filter to one category.'}, 'pageSize': {'type': ['null', 'integer'], 'default': None, 'description': 'Items per page (default: 250, max: 500).'}, 'blockType': {'type': ['null', 'string'], 'default': None, 'description': 'Filter to one block type (e.g. "SingleChoice").'}, 'published': {'type': ['null', 'boolean'], 'default': None, 'description': 'Read the bank\'s PUBLISHED items instead of its draft (default false) - a different set of items, and the pool a live Riddle\'s QuestionBank block actually draws from. Counting what one block criterion can draw is then a single call: its blockType/category/difficultyRange plus pageSize: 1, then read "total" - what that number does and does not include is in riddle://reference/concepts/question-bank-items.'}, 'questionBankId': {'type': 'integer', 'description': 'The bank to list items of - your own, or a template id from question_bank_list(scope: "templates").'}, 'difficultyRange': {'type': ['array', 'null'], 'default': None, 'description': 'Filter to a difficulty range, as [min, max] (e.g. [1, 5]).'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId', 'action'], 'properties': {'action': {'enum': ['add', 'update'], 'type': 'string', 'description': 'What to do: "add" a new item (takes blockType, category, difficulty, columns) or "update" an existing one (the same, plus questionBankItemId).'}, 'columns': {'type': 'object', 'default': None, 'description': 'The question content, as {columnName: [values]} - never a list, and a column holding a single value still takes a list. Which names are valid depends on the bank\'s riddleType AND the blockType, so take them from riddle://reference/question-bank/block-type-columns instead of guessing (an unknown one is rejected, naming it and the valid ones). On "update" this replaces the content entirely rather than merging: send every column, and hand question_bank_get_items output straight back with its {"id", "value"} objects intact - keeping those ids is what edits the stored values instead of replacing them with a fresh set.', 'additionalProperties': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'object', 'required': ['value'], 'properties': {'id': {'type': ['integer', 'null'], 'description': "The value's ID as returned by question_bank_get_items for this item; omit or null to have one assigned, and an ID the item does not have is rejected. It is an opaque handle for addressing THIS value on an update and nothing else - never sort or index by it (riddle://reference/concepts/question-bank-items). A column's order is the order of this array alone."}, 'value': {'type': ['string', 'number']}}, 'additionalProperties': False}]}, 'description': 'The values of this column, in order - either plain strings/numbers, or the {"id": .., "value": ..} objects question_bank_get_items returns. Position in this array is what defines the order; the "id"s carry no order of their own.'}}, 'category': {'type': ['null', 'string'], 'default': None, 'description': 'The item\'s category - free text, used to filter what a QuestionBank block draws (see the "questionBankCriteria" of the QuestionBank block type).'}, 'blockType': {'type': ['null', 'string'], 'default': None, 'description': 'The block type this question is shaped for, e.g. "SingleChoice". riddle://reference/question-bank/block-type-columns lists the ones valid for this bank\'s riddleType. Immutable: on "update" send the item\'s current one back unchanged (question_bank_get_items returns it), a different value is rejected.'}, 'difficulty': {'type': ['null', 'integer'], 'default': None, 'description': "The item's difficulty, 1-10 - also used to filter what a QuestionBank block draws."}, 'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank the item belongs to.'}, 'questionBankItemId': {'type': ['null', 'integer'], 'default': None, 'description': 'The ID of the item to update, as returned by question_bank_item(action: "add")/question_bank_get_items. Required for "update", rejected for "add".'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'page': {'type': ['null', 'integer'], 'default': None, 'description': 'Page number (default: 1). Scope "own" only.'}, 'tags': {'type': ['array', 'null'], 'default': None, 'description': 'Filter by tag IDs (array of integers), as returned by riddle_tag_list. Omit to ignore tags. Scope "own" only.'}, 'scope': {'enum': ['own', 'templates'], 'type': 'string', 'default': None, 'description': 'What to list: "own" (default) for the question banks of a project, "templates" for the built-in starter banks anyone can duplicate.'}, 'search': {'type': ['null', 'string'], 'default': None, 'description': 'Search term to filter banks by title. Scope "own" only.'}, 'sortBy': {'type': ['null', 'string'], 'default': None, 'description': 'Sort field: "createdAt" or "modifiedAt". Defaults to "createdAt". Scope "own" only.'}, 'pageSize': {'type': ['null', 'integer'], 'default': None, 'description': 'Items per page (default: 12, max: 50). Scope "own" only.'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID whose banks you want, as returned by project_list. Omit for the banks of the project the API key is scoped to (your personal ones on a user API key). Scope "own" only.'}, 'sortOrder': {'type': ['null', 'string'], 'default': None, 'description': 'Sort direction: "ASC" or "DESC". Defaults to "DESC". Scope "own" only.'}, 'riddleType': {'type': ['null', 'string'], 'default': None, 'description': 'Filter by Riddle type ("Quiz" or "Poll"). Omit to list banks of every type. Applies to both scopes.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['questionBankId', 'action'], 'properties': {'notes': {'type': ['null', 'string'], 'default': None, 'description': 'Plain-text notes for this bank, e.g. sourcing/curation instructions - replaces any existing notes. Required for "updateNotes", rejected for every other action.'}, 'title': {'type': ['null', 'string'], 'default': None, 'description': 'The new title for "rename", or the title of the copy for "duplicate". Required for both, rejected for every other action.'}, 'action': {'enum': ['rename', 'updateNotes', 'duplicate', 'publish'], 'type': 'string', 'description': 'What to do with the bank: "rename" (takes title), "updateNotes" (takes notes), "duplicate" (takes title and optionally projectId) or "publish" (no further parameters).'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID the copy should land in, as returned by project_list. Only for "duplicate", where omitting it uses the project the API key is scoped to.'}, 'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank to act on.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'oneOf': [{'required': ['tagName'], 'properties': {'tagId': {'const': None}, 'tagName': {'not': {'type': 'null'}}}}, {'required': ['tagId'], 'properties': {'tagId': {'not': {'type': 'null'}}, 'tagName': {'const': None}}}], 'required': ['questionBankId', 'action'], 'properties': {'tagId': {'type': ['null', 'integer'], 'default': None, 'description': 'The ID of an existing tag, as returned by riddle_tag_list. Pass either this or tagName.'}, 'action': {'enum': ['add', 'remove'], 'type': 'string', 'description': '"add" the tag to the bank, or "remove" it from the bank.'}, 'tagName': {'type': ['null', 'string'], 'default': None, 'description': 'The name of the tag. On "add" the project\'s tag of that name is reused, or created if there is none yet; on "remove" nothing is ever created and a name the bank does not carry is an error. Pass either this or tagId.'}, 'questionBankId': {'type': 'integer', 'description': 'The ID of the question bank to tag or untag.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['topics'], 'properties': {'topics': {'type': 'array', 'items': {'anyOf': [{'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'}, {'type': 'string', 'pattern': '^riddle://reference/(block-defaults|riddle-defaults|concepts|prompts)/[^/]+$'}, {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9-]*$'}]}, 'maxItems': 3, 'minItems': 1, 'description': '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.', 'uniqueItems': True}, 'blockTypes': {'type': 'array', 'items': {'type': 'string'}, 'default': None, 'description': '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.', 'uniqueItems': True}, 'fieldTypes': {'type': 'array', 'items': {'type': 'string'}, 'default': None, 'description': '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.', 'uniqueItems': True}, 'riddleType': {'type': 'array', 'items': {'enum': ['Quiz', 'Poll', 'Personality', 'Form', 'Predictor', 'Minigame', 'Leaderboard', 'Story', 'Placeholder'], 'type': 'string'}, 'default': None, 'description': '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.', 'uniqueItems': True}, 'includeAvailableTopics': {'type': 'boolean', 'default': None, 'description': '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.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['references', 'availableTopics'], 'properties': {'references': {'type': 'array', 'items': {'type': 'object', 'required': ['uri', 'name', 'summary', 'content', 'filtered'], 'properties': {'uri': {'type': 'string', 'description': 'The canonical URI of the document. Identical to the URI of the MCP resource with the same content.'}, 'name': {'type': 'string', 'description': 'Short name of the document, e.g. "block-types".'}, 'content': {'type': 'object', 'description': 'The document itself. Unaffected by "riddleType"/"blockTypes"/"fieldTypes" scoping when none was requested - identical to the same document read through resources/read.'}, 'summary': {'type': 'string', 'description': 'One line describing what the document covers.'}, 'filtered': {'type': 'object', 'description': '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.'}}}, 'description': 'One entry per requested topic, in the order requested.'}, 'availableTopics': {'type': 'object', 'description': '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.'}}}
入力スキーマ
{'type': 'object', 'required': ['type', 'build'], 'properties': {'omit': {'type': 'array', 'items': {'enum': ['build', 'warnings', 'nextBlockId', 'published', 'context'], 'type': 'string'}, 'default': None, 'description': 'Sections of the returned envelope to leave out; omit the parameter for the whole envelope. "uuid"/"type"/"modifiedAt" are always returned, and whatever you leave out is echoed back under "omittedFields", so a missing key never means the Riddle has none of it. Details: riddle://reference/concepts/warnings.', 'uniqueItems': True}, 'type': {'enum': ['Quiz', 'Poll', 'Personality', 'Form', 'Predictor', 'Minigame', 'Story', 'Leaderboard', 'Placeholder'], 'type': 'string', 'description': 'Which kind of Riddle to build - this decides which "build" fields and which block types exist. Quiz: questions with right and wrong answers, scored, one result page per score range (title + blocks). Poll: opinion questions, nothing right or wrong, one shared result page (title + blocks). Personality: answers score towards personalities, the winner is the result (title + blocks + personalities). Form: lead-collecting fields only, no questions (title + blocks). Predictor: predictions of real-world outcomes, scored once the actual result is entered (title + blocks). Minigame: SlotMachine, WheelSpinner, Sudoku, Minesweeper or Crosswords (title + blocks). Story: linear content pages, no answers of any kind (title + blocks). Leaderboard: a standalone ranking other published Riddles connect to, no blocks (title). Placeholder: no content of its own, routes to another Riddle by prioritized, time-windowed rules (title). Per-type shapes: riddle://reference/riddle-builder/riddle-types.'}, 'build': {'type': 'object', 'required': ['title'], 'properties': {'logic': {'type': 'object', 'description': 'Quiz / Poll / Form / Story only. Optional branching logic tree over the blocks. A node is {"blockId": int, "branchingType": "linear"|"answer"|"condition"|"score"}. For "linear" add "next": {<child node>}; for "answer" add "rules": [{"answers": ["Answer text"], "blockId": int, "next": {...}}]; for "condition" add "condition": {"field": string, "operator": string, "value"?: mixed} plus "ifTrue"/"ifFalse": {<child node>} (riddle://reference/concepts/logic lists the "field"/"operator" values); for "score" add "scoreType": "total"|"block" plus "ranges": [{"min": int, "max": int, "blockId": int, "next": {...}}]. A bare {"blockId": X} shows X and ends the flow; to merge paths and keep going you must repeat the shared tail under each branch. Omit for a default linear flow. >> QUIZ: A Quiz containing a Flashcard block is linear-only: one "answer"/"condition"/"score" node anywhere in the tree is then rejected for the whole Riddle. >> STORY: A Story has no answers to branch on, so only "linear" nodes are meaningful here.'}, 'title': {'type': 'string', 'description': 'The Riddle title.'}, 'blocks': {'type': 'array', 'description': 'The Riddle\'s blocks - required by every type except Leaderboard and Placeholder, which have none. A block is {"type": <one of the block types listed below for the "type" you are building>, "title": "..."} plus that block type\'s own content, and the content differs sharply per block type - unknown keys are rejected rather than ignored. A CHOICE block\'s answer options go in "items" - not "answers" - each one an object: {"title": "Paris", "isCorrect": true} on a Quiz, {"title": "Paris", "scores": [3, 0]} on a Personality Test. The blocks that take typed-in answers instead name their own key - a Quiz TextEntry takes "answers", a Quiz GuessIt "acceptableAnswers" - and some blocks (a Poll NetPromoterScore or TextEntry) have no options at all; the per-block-type reference below is what says which. A FormBuilder\'s inputs go in "fields" instead. Every remaining property, value range and trap per block type is in riddle://reference/riddle-builder/block-types; read it with reference_get scoped to your "riddleType" AND the "blockTypes" you intend to build before writing them. The block types each Riddle type allows: >> QUIZ: SingleChoice / MultipleChoice / TextEntry / Order / Flashcard / TypeRush / GuessIt / TapAndFind / SpotTheDifference / QuestionBank - the last two place their answers as hotspots on an image, in percentages of it. >> POLL: SingleChoice / MultipleChoice / Matrix / Order / Upvote / NetPromoterScore / RateIt / Swiper / Reaction / TextEntry / TierList / ThisOrThat / QuestionBank. >> PERSONALITY: SingleChoice / MultipleChoice - every answer item\'s "scores" array must have one integer per personality, in personality order. >> FORM: FormBuilder, whose "fields" are the 18 types in riddle://reference/riddle-builder/form-field-types. >> PREDICTOR: PickTheWinner / GuessTheScore. >> MINIGAME: SlotMachine / WheelSpinner / Sudoku / Minesweeper / Crosswords. >> STORY: Content / Ad / Quote / InteractiveGraphic / FormBuilder / FormField / FormSelect - a Story has no answers of any kind, so build a Poll or a Quiz instead if you need them. >> QUIZ / PREDICTOR / MINIGAME / STORY additionally take the lead-collecting blocks FormBuilder, FormField and FormSelect in the same array; on a Quiz, a Predictor or a Minigame a Name and an Email field are what make it Leaderboard-connectable (a Story scores nothing, so it collects leads but never feeds a Leaderboard). A QuestionBank block draws its questions from an existing bank ("questionBankId" plus a non-empty "questionBankBlocks"; riddle://reference/question-bank/overview).'}, 'preset': {'type': 'object', 'description': "Riddle-level design and behaviour settings (design, open/close scheduling, timers, progress, live score, result visibility, vote integrity, page chrome, ~20 UX flags); only the keys you send are applied, and a key only exists for the types that have it. A Leaderboard's own display settings live here too. Exact names: riddle://reference/concepts/preset."}, 'result': {'type': 'object', 'description': 'The single result page - Poll, Form, Predictor, Minigame, Story and Personality. A Quiz has "results" (plural, one page per score range) instead, and a Leaderboard and a Placeholder have no result page at all. Single result object: "title" plus optional "description", or an advanced "blocks" array (PopularChoices, AnsweredBlocks, Text, Media, ...) for full control over the page. Send "redirectUrl" instead to redirect rather than show a page. Both: riddle://reference/riddle-builder/result-blocks. >> FORM also: Supports dynamic %variables naming a form field by TYPE and position - "%name1", "%email1", the first field of a type also as "%name" - never by its label ("%Your name" is rejected). riddle://reference/concepts/form-fields-usage ("variables"). >> PERSONALITY instead: Optional result page configuration. Takes the full result-builder block set plus the Personality-only WinningPersonality, OtherPersonalities and Attributes blocks - riddle://reference/riddle-builder/result-blocks.'}, 'publish': {'type': 'object', 'description': 'Every type except Leaderboard. Publish CONFIGURATION stored on the Riddle - an object, not this tool\'s separate top-level "publish" boolean, which publishes right away. Covers showcase/QR code, lead verification, email automation, dataLayer, tracking, integrations, embedSettings. Keys: riddle://reference/concepts/publish.'}, 'results': {'type': 'array', 'description': 'Quiz only - every other type with a result page has the singular "result" instead. Array of result objects, each {"title": "...", "minPercentage": 0, "maxPercentage": 50} (0-100) with optional "description" - or "minPercentage"/"maxPercentage" plus an advanced "blocks" array (Text / ResultScore / Share / AnsweredBlocks / Button) for full control over the page. Send "redirectUrl" instead of "blocks" to redirect the respondent rather than show a page. Block properties and redirect support: riddle://reference/riddle-builder/result-blocks.'}, 'scoring': {'type': 'object', 'description': 'Predictor only. Scoring rules of the Predictor, a nested object. Keys (ints >= 0): "correct" (exactly right), "tendency" (right winner, wrong score), "difference" (right goal difference), "wrong". Defaults 30 / 10 / 20 / 0.'}, 'riddleId': {'type': ['string', 'null'], 'description': 'Placeholder only. The fallback target: the UUID of the Riddle to show when no condition matches. Must be an existing, non-Placeholder, published Riddle, and not this Placeholder itself. Having none is meaningful - the Placeholder then resolves to nothing. On an EDIT, omitting it leaves it as it is; "riddleId": null clears it, and is rejected if that would leave the Placeholder with no fallback and no conditions at all - as is "conditions": [] while this is empty. riddle://reference/riddle-builder/riddle-types with riddleType ["Placeholder"].'}, 'conditions': {'type': 'array', 'description': 'Placeholder only. Prioritized (first match wins), time-windowed routing rules evaluated before the fallback "riddleId"; at most 100. Each targets exactly one of "riddleId" (UUID of an existing, non-Placeholder, published Riddle) or "tag" (name or numeric id of an EXISTING tag in this Riddle\'s scope - a typo\'d name is rejected, never auto-created), never both; a "tag" also requires "tagMode": "lastPublished" or "random" (with optional "randomRefreshIntervalSeconds", "random" only). ONE kind of time window per condition - a date range ("from" required, "to" optional) or a daily one ("dailyFrom" plus "dailyTo") - with neither it always matches. No other key is accepted. This REPLACES the whole list, and the stored list is re-sorted into tiers with overlapping windows trimmed, so a read-back is not what you sent. Normalization, and why resending a read-back can delete a condition: riddle://reference/riddle-builder/riddle-types with riddleType ["Placeholder"].'}, 'leaderboard': {'type': 'object', 'description': 'Quiz / Predictor / Minigame only. Leaderboard connection. Keys: connections (leaderboard UUIDs to attach this Riddle to), identifier, nickname. identifier/nickname name a form field of this Riddle by its label ("Your email", case-insensitive) or by the key riddle_get reports ("email1"); an ambiguous label is rejected, pass the key then.'}, 'personalities': {'type': 'array', 'description': 'Personality only, and required there. Array of personality objects (min 2), each with "title" (string). Optional: "description", "media", "minScore"/"maxScore" (0-100, the score window in which this personality wins), the CTA button ("ctaButtonText"/"ctaButtonURL" - either one shows it - plus "isIncludeCTAButtonEnabled") and the runner-ups ("otherResults", "areOtherResultsEnabled", "areOtherResultsMediaEnabled"). Their exact shapes: riddle://reference/riddle-builder/riddle-types under types.Personality.'}, 'riddleConnections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Leaderboard only. Riddle UUIDs (max 10) to connect to the Leaderboard - quizzes, predictors and minigames (except WheelSpinner-only ones), each already published; connecting a draft fails. On an edit this REPLACES the whole list rather than appending, so resend every UUID you want to keep.'}}, 'description': 'The build configuration of the Riddle type named in "type".This is the raw build configuration in the engine\'s own key names - the exact same shape riddle_get returns under "build", riddle_builder_update takes, and riddle_builder_validate dry-runs, so a read-back can be fed straight back in - riddle_get\'s "build" KEY, never the outer envelope around it, whose "uuid" and siblings are rejected as unsupported properties. Unknown keys are rejected rather than ignored. WHICH fields exist is decided by "type": each one below opens with the types it belongs to, and a field the chosen type does not have is rejected. Only "title" exists on all nine.'}, 'queue': {'type': ['null', 'boolean'], 'default': None, 'description': 'Whether to queue the creation asynchronously.'}, 'project': {'type': ['null', 'integer'], 'default': None, 'description': 'The project ID; pass NULL for personal project; omit to use the currently selected project.'}, 'publish': {'type': ['null', 'boolean'], 'default': None, 'description': 'Whether to publish the Riddle right after creation; default false (draft). Distinct from the "publish" field INSIDE the build config, which is the stored publish configuration.'}, 'templateId': {'type': ['null', 'integer'], 'default': None, 'description': "Only when this build config came from a template you adapted (riddle_template_get): that template's id. Always pass it when you have one - the new Riddle then starts out on the template's whole DESIGN, including what no build config can express, with your build config applied on top. The content is yours either way. Details: riddle://reference/concepts/unknown-properties."}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['UUID', 'build'], 'properties': {'UUID': {'type': 'string', 'description': 'The UUID of the Riddle to edit, as returned by riddle_list or riddle_get (e.g. "6FA740EW") - the Riddle itself, never a block id or a project id.'}, 'omit': {'type': 'array', 'items': {'enum': ['build', 'warnings', 'nextBlockId', 'published', 'context'], 'type': 'string'}, 'default': None, 'description': 'Sections of the returned envelope to leave out; omit the parameter for the whole envelope. "uuid"/"type"/"modifiedAt" are always returned, and whatever you leave out is echoed back under "omittedFields", so a missing key never means the Riddle has none of it. Details: riddle://reference/concepts/warnings.', 'uniqueItems': True}, 'build': {'type': 'object', 'properties': {'logic': {'type': 'object', 'description': 'New branching logic tree, same shape as in riddle_builder_create. Replaces the current logic; omit to keep it. Deleting a block the stored CUSTOM logic still references is rejected unless the same call sends a replacement tree without it, or "logic": {"$reset": true} to fall back to the default linear flow ("$reset" with any other key is rejected). Node shapes: riddle://reference/concepts/logic.'}, 'title': {'type': 'string', 'description': 'New Riddle title; omit to keep the current one.'}, 'blocks': {'type': 'array', 'description': 'The blocks to change, add or remove - only the ones you touch, everything else stays as it is. EDIT: the block\'s "id" (riddle_get reports it) plus only the properties that change - {"id": 3, "title": "New question title"}. ADD: "$create": true instead of an "id", plus everything a new block needs in the shape riddle_builder_create takes - {"$create": true, "type": "SingleChoice", "title": "New question", "items": [...]}. REMOVE: "id" plus "$delete": true. A block cannot change its "type"; an unknown "id" is rejected naming the ids that exist. A collection inside a block merges by "id" the same way - {"id": 3, "items": [{"id": 2, "title": "Bonn"}]} renames one answer and leaves the others alone. Which collections merge, which are replaced wholesale, and which deletes are refused for still being referenced: riddle://reference/concepts/merge-semantics (markers: riddle://reference/concepts/editing).'}, 'preset': {'type': 'object', 'description': 'Design and riddle-level behaviour settings to change, same shape as in riddle_builder_create; only the keys you send are applied. A Leaderboard\'s podium colours ("color1st"/"color2nd"/"color3rd") and "isEmailVerificationEnabled" live here too.'}, 'result': {'type': 'object', 'description': 'New single result page (Poll / Form / Predictor / Personality / Minigame / Story), same shape as in riddle_builder_create. Replaces the current one as a whole - a result page is neither editable property-by-property nor mergeable by "id", so send it complete. Omit to keep it untouched.'}, 'publish': {'type': 'object', 'description': 'Publish-configuration settings to change, same shape as in riddle_builder_create; only the keys you send are applied. Distinct from this tool\'s top-level "publish" boolean, which publishes right away.'}, 'results': {'type': 'array', 'description': 'New result pages (Quiz), same shape as in riddle_builder_create. Replaces ALL current pages with what you send, in the order you send it - pages are neither editable per entry nor reorderable, so read them with riddle_get first and resend every page you want to keep, including its "id", which is honored to keep the page stable. Omit to keep them all untouched. riddle://reference/concepts/result-pages.'}, 'scoring': {'type': 'object', 'description': 'Predictor only. New scoring rules, same shape as in riddle_builder_create - only the keys you send are changed, so {"correct": 50} leaves "tendency"/"difference"/"wrong" as they were. Omit to keep them.'}, 'riddleId': {'type': ['string', 'null'], 'description': 'Placeholder only. The fallback target: the UUID of the Riddle to show when no condition matches. Must be an existing, non-Placeholder, published Riddle, and not this Placeholder itself. Having none is meaningful - the Placeholder then resolves to nothing. On an EDIT, omitting it leaves it as it is; "riddleId": null clears it, and is rejected if that would leave the Placeholder with no fallback and no conditions at all - as is "conditions": [] while this is empty. riddle://reference/riddle-builder/riddle-types with riddleType ["Placeholder"].'}, 'conditions': {'type': 'array', 'description': 'Placeholder only. Prioritized (first match wins), time-windowed routing rules evaluated before the fallback "riddleId"; at most 100. Each targets exactly one of "riddleId" (UUID of an existing, non-Placeholder, published Riddle) or "tag" (name or numeric id of an EXISTING tag in this Riddle\'s scope - a typo\'d name is rejected, never auto-created), never both; a "tag" also requires "tagMode": "lastPublished" or "random" (with optional "randomRefreshIntervalSeconds", "random" only). ONE kind of time window per condition - a date range ("from" required, "to" optional) or a daily one ("dailyFrom" plus "dailyTo") - with neither it always matches. No other key is accepted. This REPLACES the whole list, and the stored list is re-sorted into tiers with overlapping windows trimmed, so a read-back is not what you sent. Normalization, and why resending a read-back can delete a condition: riddle://reference/riddle-builder/riddle-types with riddleType ["Placeholder"].'}, 'leaderboard': {'type': 'object', 'description': 'Quiz/Predictor/Minigame only. New leaderboard connection: "connections" (leaderboard UUIDs), "identifier", "nickname", as in riddle_builder_create. Omit to leave the Riddle\'s connections exactly as they are - sending this only ever appends a connection, so there is nothing to merge per key.'}, '$blocksOrder': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'The new order of the Riddle\'s blocks, as the complete list of their IDs - [3, 1, 2] puts block 3 first. Complete means every ID the Riddle has AFTER this edit, exactly once; a partial list is rejected. It runs last, so a deleted block must NOT be listed and an added one MUST be - give the "$create" entry an explicit "id" from riddle_get\'s "nextBlockId". The same marker orders a collection inside a block ("$itemsOrder", "$fieldsOrder"). Rules: riddle://reference/concepts/merge-semantics.'}, 'personalities': {'type': 'array', 'description': 'Personality Test only. The personalities to change, add or remove, merged by "id" exactly like "blocks" - "id" plus the changed properties, "$create": true plus a full new personality, or "id" plus "$delete": true. There is no "$personalitiesOrder": the order is not editable, and the order you send carries no meaning. The minimum of 2 is checked against the merge result. Answer "scores" follow a personality by identity, not position - a new one starts at 0 on every existing answer item, so resend the affected blocks\' "items" with their full "scores" arrays in the same call.'}, 'riddleConnections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Leaderboard only. The complete list of connected Riddle UUIDs - it REPLACES the stored set rather than appending, so read the Riddle with riddle_get first and resend every UUID you want to keep. Max 10; each target must already be published and have Name and Email form fields.'}}, 'description': 'The changes to apply, as a partial build configuration in the engine\'s own key names - the same shape riddle_get returns under "build" and riddle_builder_create takes. Only the fields you send are touched; send at least one. A field only exists for the Riddle types that have it, and unknown keys are rejected rather than ignored.'}, 'publish': {'type': ['null', 'boolean'], 'default': None, 'description': 'Whether to publish the Riddle after the edit; default false, which leaves the changes in the draft. It rides along with an edit, it is not one: publish: true with an empty "build" is rejected. To publish what is already in the draft, call riddle_publish.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'builds': {'type': 'array', 'default': [], 'description': 'The build configs to dry-run, 1 to 20 entries, creates and edits mixable: {type, build}\nfor a would-be creation or {UUID, build} for an edit, exactly one of "type"/"UUID" per\nentry. "type" is one of Quiz / Poll / Personality / Form / Predictor / Leaderboard /\nMinigame / Story / Placeholder, and "build" is exactly what riddle_builder_create or\nriddle_builder_update takes, so a config moves between them unchanged. An edit entry hits\nthe same origin gate as riddle_builder_update - rejected unless the Riddle is\napiManageable (context.origin.apiManageable on riddle_get).'}, 'project': {'type': ['null', 'integer'], 'default': None, 'description': 'The project to dry-run the CREATING entries in - riddle_builder_create\'s own parameter, and it must be the project you intend to create in: the scratch Riddle is built inside it, and anything project-scoped the build REFERENCES (a Form behind FormSelect, a tag, a project ad slot) is only resolvable from there. Without it such a build is evaluated in the personal project and rejected with "You are not authorized to access Form <UUID>" - a scope problem wearing a permissions error, and a false negative for a build a real create would accept. NULL means the personal project, omitted the currently selected one. Ignored by editing entries ({UUID, build}), always evaluated in their own Riddle\'s project.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'oneOf': [{'required': ['UUID'], 'properties': {'UUID': {'not': {'type': 'null'}}, 'UUIDs': {'const': None}}}, {'required': ['UUIDs'], 'properties': {'UUID': {'const': None}, 'UUIDs': {'not': {'type': 'null'}}}}], 'properties': {'UUID': {'type': ['null', 'string'], 'default': None, 'description': 'The UUID of the single Riddle you want to delete. Pass either this or UUIDs. Only Riddles created via the Riddle Builder tools or generated by the Riddle AI can be deleted.'}, 'UUIDs': {'type': ['array', 'null'], 'items': {'type': 'string', 'pattern': '^\\s*[A-Za-z0-9]{4,32}\\s*$'}, 'default': None, 'maxItems': 100, 'minItems': 1, 'description': 'Several Riddles to delete at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID. Same restriction as UUID: each one must have been created via the Riddle Builder or generated by the Riddle AI.'}, 'dryRun': {'type': 'boolean', 'default': False, 'description': 'true reports whether each Riddle could be deleted and deletes nothing. Works for one UUID and for UUIDs.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'oneOf': [{'required': ['UUID'], 'properties': {'UUID': {'not': {'type': 'null'}}, 'UUIDs': {'const': None}}}, {'required': ['UUIDs'], 'properties': {'UUID': {'const': None}, 'UUIDs': {'not': {'type': 'null'}}}}], 'properties': {'UUID': {'type': ['null', 'string'], 'default': None, 'description': 'The UUID of the single Riddle you want to read. Pass either this or UUIDs.'}, 'omit': {'type': 'array', 'items': {'enum': ['build', 'warnings', 'nextBlockId', 'published', 'context'], 'type': 'string'}, 'default': None, 'description': 'Leaves whole sections out: "build", "warnings", "nextBlockId", "published", "context"\n(identity fields always stay). The one omission that materially shrinks a response is\n"published" on a Riddle with unpublished changes - a second full build configuration.\nWhatever you leave out is echoed in "omittedFields", so a missing key never reads as\n"this Riddle has none of that". Details: riddle://reference/concepts/warnings.', 'uniqueItems': True}, 'UUIDs': {'type': ['array', 'null'], 'items': {'type': 'string', 'pattern': '^\\s*[A-Za-z0-9]{4,32}\\s*$'}, 'default': None, 'maxItems': 20, 'minItems': 1, 'description': 'Several Riddles to read at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"]\n(max 20 - lower than the other bulk tools, since every entry is a full envelope rather\nthan compact state). Either this or UUID; rejected together with includeRiddleData.\nEntries are read in the order given and, once the response would exceed the inline size\nbudget, the remaining ones come back as compact state with "truncated": true instead -\nso put the Riddles you need in full first. See riddle://reference/concepts/bulk.'}, 'omittedDefaults': {'type': 'boolean', 'default': None, 'description': 'Whether every block should additionally carry its "omittedDefaults" map: the properties it left at that block type\'s default, with the value each is at. Off by default - measured, those maps are 85-90% of a read-back, and riddle://reference/block-defaults/<block type> states the same defaults without a Riddle in hand. Ask for them only to learn what THIS Riddle left at its default, and read them, never resend them.'}, 'includeRiddleData': {'type': 'boolean', 'default': False, 'description': 'Additionally returns the full stored Riddle payload (content, settings, preset\nmerge/diff, ...) under "riddle" - tens of KB, only for inspecting raw stored\ndata. Not allowed together with UUIDs.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['UUID'], 'properties': {'UUID': {'type': 'string', 'description': 'The UUID of the Riddle you want to retrieve the HTML embed code for'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'page': {'type': ['null', 'integer'], 'default': None, 'description': 'Page number, 1-indexed, 12 Riddles per page (default: 1). Zero or negative is rejected with a VALIDATION_ERROR rather than clamped.'}, 'tags': {'type': ['array', 'null'], 'default': None, 'description': 'Filter by tag IDs (array of integers). Omit to ignore tags.'}, 'type': {'type': ['array', 'null'], 'default': None, 'description': 'Filter by Riddle type (array of strings). Valid values: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Placeholder", "Story". Omit to include all types.'}, 'scope': {'enum': ['project', 'account'], 'type': 'string', 'default': None, 'description': 'What to list: "project" (default) for the Riddles of a single project, "account" for every Riddle of the account at once.'}, 'origin': {'type': ['null', 'string'], 'default': None, 'description': 'Filter by how the Riddle was created: "api" (Riddle Builder API or Riddle AI, so\nriddle_delete/riddle_builder_update/palette_customize work on it) or "manual" (built by\nhand in the Creator, where those three are rejected). Omit for both. A filter value\nonly - the "origin" returned per Riddle is {builder, aiGenerated, apiManageable}.'}, 'search': {'type': ['null', 'string'], 'default': None, 'description': 'Search term to filter Riddles by title'}, 'sortBy': {'type': ['null', 'string'], 'default': None, 'description': 'Sort field: "created", "published", or "modified"'}, 'status': {'type': ['null', 'string'], 'default': None, 'description': 'Filter by status: "published", "modified", or "draft". Omit to include all statuses.'}, 'notType': {'type': ['array', 'null'], 'default': None, 'description': 'Exclude specific Riddle types (array of strings, same valid values as type). Omit to exclude nothing. Scope "project" only - the account list has no exclusion filter.'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'Filter by project ID; omit or null for the authenticated user\'s personal project. Scope "project" only.'}, 'sortOrder': {'type': ['null', 'string'], 'default': None, 'description': 'Sort direction: "ASC" or "DESC"'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'oneOf': [{'required': ['UUID'], 'properties': {'UUID': {'not': {'type': 'null'}}, 'UUIDs': {'const': None}}}, {'required': ['UUIDs'], 'properties': {'UUID': {'const': None}, 'UUIDs': {'not': {'type': 'null'}}}}], 'properties': {'UUID': {'type': ['null', 'string'], 'default': None, 'description': 'The UUID of the single Riddle you want to move or check. Pass either this or UUIDs.'}, 'UUIDs': {'type': ['array', 'null'], 'items': {'type': 'string', 'pattern': '^\\s*[A-Za-z0-9]{4,32}\\s*$'}, 'default': None, 'maxItems': 100, 'minItems': 1, 'description': '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.'}, 'dryRun': {'type': 'boolean', 'default': False, 'description': 'true runs the movability check against the given projectId and changes nothing. Pointless without projectId, which already only checks.'}, 'projectId': {'type': ['null', 'integer', 'string'], 'anyOf': [{'type': 'integer', 'minimum': 1, 'description': 'A project (team) ID from project_list.'}, {'type': 'string', 'const': 'personal', 'description': 'Move the Riddles into the personal project.'}], 'default': None, 'description': '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.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'oneOf': [{'required': ['UUID'], 'properties': {'UUID': {'not': {'type': 'null'}}, 'UUIDs': {'const': None}}}, {'required': ['UUIDs'], 'properties': {'UUID': {'const': None}, 'UUIDs': {'not': {'type': 'null'}}}}], 'properties': {'UUID': {'type': ['null', 'string'], 'default': None, 'description': 'The UUID of the single Riddle you want to publish or unpublish. Pass either this or UUIDs.'}, 'omit': {'type': 'array', 'items': {'enum': ['build', 'warnings', 'nextBlockId', 'published', 'context'], 'type': 'string'}, 'default': None, 'description': 'Same "omit" parameter as riddle_get\'s, applied to the single-UUID response envelope (see riddle_get for the full description). Has no effect on the bulk (UUIDs) response, which never carries a build configuration to begin with.', 'uniqueItems': True}, 'UUIDs': {'type': ['array', 'null'], 'items': {'type': 'string', 'pattern': '^\\s*[A-Za-z0-9]{4,32}\\s*$'}, 'default': None, 'maxItems': 100, 'minItems': 1, 'description': 'Several Riddles to publish or unpublish at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID.'}, 'publish': {'type': 'boolean', 'default': True, 'description': 'true (the default) publishes the Riddles, false takes them off the web again.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['UUID', 'title'], 'properties': {'UUID': {'type': 'string', 'description': 'The UUID of the Riddle you want to rename'}, 'title': {'type': 'string', 'description': 'The new title for the Riddle'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'allOf': [{'oneOf': [{'required': ['UUID'], 'properties': {'UUID': {'not': {'type': 'null'}}, 'UUIDs': {'const': None}}}, {'required': ['UUIDs'], 'properties': {'UUID': {'const': None}, 'UUIDs': {'not': {'type': 'null'}}}}]}, {'oneOf': [{'required': ['tagName'], 'properties': {'tagId': {'const': None}, 'tagName': {'not': {'type': 'null'}}}}, {'required': ['tagId'], 'properties': {'tagId': {'not': {'type': 'null'}}, 'tagName': {'const': None}}}]}], 'required': ['action'], 'properties': {'UUID': {'type': ['null', 'string'], 'default': None, 'description': 'The UUID of the single Riddle to tag or untag. Pass either this or UUIDs.'}, 'UUIDs': {'type': ['array', 'null'], 'items': {'type': 'string', 'pattern': '^\\s*[A-Za-z0-9]{4,32}\\s*$'}, 'default': None, 'maxItems': 100, 'minItems': 1, 'description': 'Several Riddles to tag or untag at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID.'}, 'tagId': {'type': ['null', 'integer'], 'default': None, 'description': 'The ID of an existing tag, as returned by riddle_tag_list. Pass either this or tagName.'}, 'action': {'enum': ['add', 'remove'], 'type': 'string', 'description': 'What to do with the tag on those Riddles: "add" it or "remove" it. Each takes UUID or UUIDs and tagName or tagId.'}, 'tagName': {'type': ['null', 'string'], 'default': None, 'description': 'The name of the tag. On "add" the Riddle\\\'s project gets the tag of that name, created if it has none yet; on "remove" nothing is ever created and a name the project does not have is an error. Pass either this or tagId.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['tagId'], 'properties': {'tagId': {'type': 'integer', 'description': 'The ID of the tag to delete, as returned by riddle_tag_list. The only way to name it: a tag is deleted by id, not by name.'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID the tag belongs to, as returned by project_list. Omit for the project the API key is scoped to, or your personal tags on a user API key.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID, as returned by project_list. Omit for the project the API key is scoped to, or your personal tags on a user API key.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['UUID'], 'properties': {'UUID': {'type': 'string', 'description': 'The UUID of the Riddle to store as a template, e.g. "6FA740EW".'}, 'title': {'type': ['null', 'string'], 'default': None, 'description': "Title for the template. Omit to keep the Riddle's own title."}, 'isQuickCreate': {'type': 'boolean', 'default': False, 'description': 'Whether the template also shows up in the Creator\'s "quick create" list, i.e. among the starting points offered when creating a new Riddle. Defaults to false.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'description': 'The ID of the template, as returned by riddle_template_list or riddle_template_public_list.'}, 'omittedDefaults': {'type': ['null', 'boolean'], 'default': None, 'description': 'Whether every block additionally carries its "omittedDefaults" map - the properties it left out for still being at that block type\'s default, with the value each is at. Off by default: those maps measure 85-90% of the response, and riddle://reference/riddle-defaults/<riddle type> plus riddle://reference/block-defaults/<block type> state the same defaults without a template in hand. Pass true only to learn what THIS template left at its default - to read, never to resend.'}, 'includeBuildConfig': {'type': 'boolean', 'default': True, 'description': "Whether to read the template as a build configuration. Defaults to true, which is the point of this tool; false returns only the template's metadata, a far smaller response."}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'type': {'type': ['null', 'string'], 'default': None, 'description': 'Only return templates of this Riddle type: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Story" or "Placeholder". Omit to get all of them.'}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID whose templates you want, as returned by project_list. Omit to use the project the API key is scoped to (your personal templates for a user API key).'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {'type': {'type': ['null', 'string'], 'default': None, 'description': 'Only return templates of this Riddle type: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Story" or "Placeholder". Omit to get all of them.'}, 'category': {'type': ['null', 'string'], 'default': None, 'description': 'Only return templates of this category (the tag public templates are grouped under), a snake_case slug such as "audience_research" or "feedback_surveys" - not a display name. Omit to get every category, which is also how you find out which ones exist.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'description': 'The ID of the template to create a Riddle from, as returned by riddle_template_list or riddle_template_public_list.'}, 'omit': {'type': 'array', 'items': {'enum': ['build', 'warnings', 'nextBlockId', 'published', 'context'], 'type': 'string'}, 'default': None, 'description': 'Same "omit" parameter as riddle_get\'s, applied to the returned envelope (see riddle_get for the full description): sections of it to leave out, "published" being the one that still moves a copy of a template materially. The per-block default maps are not in this response at all - they are opt-in through riddle_get/riddle_template_get and this tool has no such parameter.', 'uniqueItems': True}, 'title': {'type': ['null', 'string'], 'default': None, 'description': "Title for the new Riddle. Omit to keep the template's own title."}, 'projectId': {'type': ['null', 'integer'], 'default': None, 'description': 'The project (team) ID to create the Riddle in, as returned by project_list. Omit to use the project the API key is scoped to (your personal project for a user API key).'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['view', 'namespace'], 'properties': {'page': {'type': ['null', 'integer'], 'default': None, 'description': 'Page number of the account-wide summary, 1-indexed (default: 1). Zero or negative is rejected with a VALIDATION_ERROR, not clamped to page 1 - the same contract as riddle_list/project_list. That view only.'}, 'view': {'enum': ['totals', 'timeseries', 'breakdown'], 'type': 'string', 'description': 'How deeply to measure: "totals" (one aggregate for the period), "timeseries" (that aggregate per consecutive interval, requires dateFrom and dateTo) or "breakdown" (the per-block detail, or the per-Riddle summary for namespace "user").'}, 'dateTo': {'type': ['null', 'string'], 'default': None, 'description': 'End date (inclusive), format: YYYY-MM-DD, e.g. "2026-01-31". Same rules as dateFrom; where a default applies it is today.'}, 'sortBy': {'enum': ['views', 'starts', 'submissions', 'timeActive'], 'type': 'string', 'default': None, 'description': 'Metric the account-wide summary\'s Riddles are ranked by before the page is cut: "views" (default), "starts", "submissions" or "timeActive". Sorting always spans the whole account (or the projects given), so page 1 is genuinely the top of the account. That view only.'}, 'dateFrom': {'type': ['null', 'string'], 'default': None, 'description': 'Start date (inclusive), format: YYYY-MM-DD, e.g. "2026-01-01". Required for "timeseries". On "totals" and a Riddle/project "breakdown", omit both dates for alltime and pass only one for an open-ended range; the account-wide summary and the project breakdown instead default to one CALENDAR month before today - the same default the Creator\'s dashboards use, so 29 to 32 days depending on the month, not exactly 30. Send it explicitly when the exact span matters.'}, 'entityId': {'type': ['null', 'string'], 'default': None, 'description': 'ID of the entity: a project ID (integer as string) for "project", a user ID (integer as string) for "user", a Riddle UUID for "riddle". Get them from project_list, whoami ("user", not the string "user") and riddle_list respectively. Required for every view except the account-wide summary (view "breakdown" with namespace "user"), which measures the API key\'s own account and rejects it.'}, 'namespace': {'enum': ['project', 'user', 'riddle'], 'type': 'string', 'description': 'Entity type to fetch stats for.'}, 'projectIds': {'type': ['array', 'null'], 'default': None, 'description': 'Narrow the account-wide summary to these project IDs (array of integers, from project_list). Omit to cover the whole account, including the personal project. Passing a project the user cannot view stats of is an error, not a silently skipped project. That view only.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
最近のツール変更
類似のMCPサーバー
api
Creates, manages, AI-generates, and renders quiz and flashcard videos, including templates and downloadable video outputs.
PodLearn
Searches podcasts and YouTube, transcribes episodes, searches transcripts, generates structured lessons, and creates LinkedIn pos…
Tutorializer Video Tutorials
Manages localized tutorials, voiceover segments, pronunciation rules, and registered rendered tutorial videos.
Escola de Rádio TV & Web (ER+)
Provides read-only access to a Brazilian radio school's courses, classes, teachers, podcasts, blog, services, and availability.
Brainiall Pronunciation
Assesses English pronunciation, transcribes audio, identifies speakers by voiceprint and synthesizes English speech in multiple v…
QuizBase
Searches, filters, samples, and manages a large multilingual catalog of trivia questions with categories, topics, provenance, and…
Speech AI - Pronunciation, STT & TTS
Supports English pronunciation assessment, multilingual speech transcription, text-to-speech synthesis, and phoneme reference dat…
Soluble(s) — Podcast de journalisme de solutions
Searches French solutions-journalism podcast episodes and transcripts, including child-friendly versions and practical actions.