Google Search Console integration for Model Context Protocol (MCP)
Riddle is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Build, publish and analyze quizzes, polls, forms and personality tests. Riddle account required.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http riddle-mcp https://www.riddle.com/creator/api/v3/mcp
# 2 — ask your agent for something these tools do
# media_upload_link, media_delete, riddle_template_create and 38 more
Riddle costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http riddle-mcp https://www.riddle.com/creator/api/v3/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
41 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Creates a single-use link for uploading ONE media file into the media library. Call it when the user has a LOCAL file for a Riddle: this server cannot receive bytes, so the upload is yours. A link expires after 5 minutes, dies on first use (successful or not), and only 20 are handed out per account per 5 minutes - so create one immediately before each upload, a batch one file at a time rather than
No parameter schema on file.
Deletes a file from the media library permanently, to clean up after yourself: an upload that turned out wrong, or a file the user no longer wants stored (it frees the storage it counted against). The file must be unused - one any Riddle still shows is refused with a message naming those Riddles, since deleting it would leave a broken image behind in a live Riddle; remove it there first (riddle_bu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mediaId | integer | yes | 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. |
Stores an existing Riddle as a template of its project (or of the user, for a personal Riddle), so new Riddles can be created from it with riddle_template_use. The template is a copy taken at this moment - the Riddle keeps living its own life and later changes to it do not reach the template. It copies what the Riddle currently has stored, published or not. Returns the created template: {id, title
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | string | yes | The UUID of the Riddle to store as a template, e.g. "6FA740EW". |
| title | null/string | no | Title for the template. Omit to keep the Riddle's own title. |
| isQuickCreate | boolean | no | 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. |
| coverMediaId | null/integer | no | Media library image to show as the template's "image" (see riddle_template_update). Omit for the Riddle's own cover. |
| iconMediaId | null/integer | no | Same, for the "icon". |
Changes a template's title and/or its gallery image and icon. Images come from the media library: upload with media_upload_link, pass the reported "mediaId" (stored by URL - deleting the file breaks the image). Only what you pass changes; the template's content cannot be changed (create a new template from the edited Riddle). Public templates only by Riddle admins. Returns the template like riddle
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | Template ID, from riddle_template_list. |
| title | null/string | no | New title. Omit to keep it. |
| coverMediaId | null/integer | no | Media library image (the "mediaId" media_upload_link reports) to show as the template's "image". Omit to keep the current one. |
| iconMediaId | null/integer | no | Same, for the "icon". |
| remove | array | no | Images to take away again: the cover then falls back to the Riddle's cover, the icon to the type's default. |
Lists the templates of a project (or your personal ones) - the ones made from your own Riddles with riddle_template_create, NOT Riddle's public ones, which riddle_template_public_list returns. Quick-create templates (isQuickCreate: true) are included alongside the regular ones; there is no separate listing for them. "type" filters by Riddle type. Returns {items: [{id, title, type, blocksCount, ima
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | null/string | no | Only return templates of this Riddle type: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Story" or "Placeholder". Omit to get all of them. |
| projectId | null/integer | no | 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). |
Lists Riddle's public templates - the ready-made ones every account has, as opposed to riddle_template_list's own ones. They are grouped by category (the tag the Creator sorts them by), so calling this without arguments is also how you learn which categories exist; "category" and "type" narrow it. Returns {categories: {<category>: [{id, title, type, blocksCount, image, icon, createdAt, riddle, isP
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | null/string | no | Only return templates of this Riddle type: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Story" or "Placeholder". Omit to get all of them. |
| category | null/string | no | 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 categor |
Reads one template, by default INCLUDING its build configuration - the same "build" shape riddle_get returns and riddle_builder_create accepts. This is how a template is ADAPTED rather than copied: edit the returned "build" (wording, questions, blocks) and build it with riddle_builder_create under the template's "type", passing this id as "templateId" so the new Riddle is still recorded as coming
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | The ID of the template, as returned by riddle_template_list or riddle_template_public_list. |
| includeBuildConfig | boolean | no | 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. |
| omittedDefaults | null/boolean | no | 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 meas |
Creates a new Riddle from a template as an unchanged copy of it - content, settings and design preset - recorded as a copy of the template's Riddle (riddle_get reports it as context.duplicated). Use this whenever the template is what you want; to adapt it first, read it with riddle_template_get and build the edited configuration with riddle_builder_create instead. The new Riddle is a DRAFT - riddl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | integer | yes | The ID of the template to create a Riddle from, as returned by riddle_template_list or riddle_template_public_list. |
| title | null/string | no | Title for the new Riddle. Omit to keep the template's own title. |
| projectId | null/integer | no | 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). |
| omit | array | no | 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 t |
Lists the tags of a project as {items: [{id, name, count, bankCount}]}, unpaginated - the labels the Creator shows and riddle_list's "tags" filter selects by, and where the ids that filter takes come from. Riddle tags and question bank tags are ONE set per project (question_bank_tag is the bank side of the same tags, with the same ids), and a tag belongs to a project: "Campaign 2026" in one projec
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | null/integer | no | 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. |
Puts a tag on Riddles or takes it off again, by "action" - ONE assignment per Riddle, never the tag itself (riddle_tag_list reads the labels of a project, riddle_tag_delete removes one). "add" gives one Riddle (UUID) or many (UUIDs, max 100) the tag named by tagName - created in each Riddle's OWN project if it has none of that name, so one call can span projects - or by tagId, which exists in one
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | What to do with the tag on those Riddles: "add" it or "remove" it. Each takes UUID or UUIDs and tagName or tagId. |
| UUID | null/string | no | The UUID of the single Riddle to tag or untag. Pass either this or UUIDs. |
| UUIDs | array/null | no | Several Riddles to tag or untag at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID. |
| tagName | null/string | no | 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 eit |
| tagId | null/integer | no | The ID of an existing tag, as returned by riddle_tag_list. Pass either this or tagName. |
Deletes the TAG ITSELF from a project - the label, for good - and no Riddle, no question bank and no assignment. Rarely needed: untagging the last carrier already removes a tag (riddle_tag action "remove"), so this is for a leftover from before that cleanup existed. It detaches nothing on the way, so a tag any Riddle or question bank still carries is rejected with a message naming how many of each
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tagId | integer | yes | 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 | null/integer | no | 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. |
A simple tool that returns "Pong". Can be used to test connectivity and authentication to the MCP.
No parameter schema on file.
Returns a paginated list of Riddles. With the default scope "project" they come from a single project - use projectId to name it, or omit it for the project the API key is scoped to. With scope "account" they come from the entire account instead: the personal project and every team project the user has access to, in one list - the account-wide listing is this scope, not a tool of its own; projectI
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | no | What to list: "project" (default) for the Riddles of a single project, "account" for every Riddle of the account at once. |
| projectId | null/integer | no | Filter by project ID, as returned by project_list. Omit to use the project the API key is scoped to (your personal project for a user API key). Scope "project" only. |
| type | array/null | no | Filter by Riddle type (array of strings). Valid values: "Quiz", "Poll", "Form", "Personality", "Predictor", "Minigame", "Leaderboard", "Placeholder", "Story". Omit to include all types. |
| notType | array/null | no | 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. |
| tags | array/null | no | Filter by tag IDs (array of integers). Omit to ignore tags. |
| status | null/string | no | Filter by status: "published", "modified", or "draft". Omit to include all statuses. |
| search | null/string | no | Search term to filter Riddles by title |
| origin | null/string | no | Filter by how the Riddle was created: "api" (Riddle Builder API or Riddle AI) or "manual" (made in the Creator). Omit for both. A filter value only - the "origin" returned per Riddle is {builder, aiGe |
| sortBy | null/string | no | Sort field: "created", "published", or "modified" |
| sortOrder | null/string | no | Sort direction: "ASC" or "DESC" |
| page | null/integer | no | Page number, 1-indexed, 12 Riddles per page (default: 1). Zero or negative is rejected with a VALIDATION_ERROR rather than clamped. |
Reads one Riddle - or several, with UUIDs - as the compact build-configuration envelope {uuid, type, modifiedAt, build, nextBlockId, warnings, published, context}. "build" is the DRAFT and is exactly what the riddle_builder_* tools accept back; "published" is the live version visitors see (null = never published, {"status": "identical"} = the live version matches the draft, {"status": "differs", "
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | null/string | no | The UUID of the single Riddle you want to read. Pass either this or UUIDs. |
| UUIDs | array/null | no | Several Riddles to read at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 20 - lower than the other bulk tools, since every entry is a full envelope rather than compact state). Eithe |
| includeRiddleData | boolean | no | Additionally returns the full stored Riddle payload (content, settings, preset merge/diff, ...) under "riddle" - tens of KB, only for inspecting raw stored data. Not allowed together with UUIDs. |
| omit | array | no | Leaves whole sections out: "build", "warnings", "nextBlockId", "published", "context" (identity fields always stay). The one omission that materially shrinks a response is "published" on a Riddle with |
| omittedDefaults | boolean | no | 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 |
Gets the HTML embed code for a Riddle by its UUID. The code is returned regardless of publish state, but the URL it embeds will not serve the Riddle until it is published.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | string | yes | The UUID of the Riddle you want to retrieve the HTML embed code for |
Publishes one or many Riddles, or takes them off the web again with publish: false (there is no unpublish tool). A published Riddle's public URL is the response's "context.viewUrl" - report that, never one spelled from the UUID (hosts differ per environment). With UUID the response is the riddle_get envelope with the new state under "context.published" ("omit" shrinks it the same way); with UUIDs
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | null/string | no | One Riddle's UUID. Pass this or UUIDs. |
| UUIDs | array/null | no | Several Riddle UUIDs, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass this or UUID. |
| publish | boolean | no | true (the default) publishes the Riddles, false takes them off the web again. |
| omit | array | no | riddle_get's "omit", for the single-UUID response. Ignored with UUIDs (the bulk entries carry no build configuration). |
Renames a Riddle with the specified UUID. Returns only the confirmation of the change (uuid, title, modified state), not the entire Riddle. Only if the Riddle's origin.writableByThisKey is true (riddle_get, riddle_list): riddle://reference/concepts/access.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | string | yes | The UUID of the Riddle you want to rename |
| title | string | yes | The new title for the Riddle |
Deletes one or many Riddles. Pass UUID for one, or UUIDs (max 100) to clean up several at once - e.g. everything riddle_list returned with origin: "api". A bulk delete is not atomic and never gives up early: a Riddle that cannot be deleted is that entry's "error" and every other Riddle is still deleted (riddle://reference/concepts/bulk). A Riddle another item of the same batch still references (a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | null/string | no | The UUID of the single Riddle you want to delete. Pass either this or UUIDs. |
| UUIDs | array/null | no | Several Riddles to delete at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID. |
| dryRun | boolean | no | true reports whether each Riddle could be deleted and deletes nothing. Works for one UUID and for UUIDs. |
Moves one or many Riddles into another project or into the personal project - and, given no destination, reports whether it could instead of moving anything. Pass UUID for one Riddle or UUIDs (max 100) for several. CHECK MODE: leave projectId out (or pass dryRun: true alongside one) and NOTHING is changed - the call runs the very same validation a real move runs and answers {canMoveAll, movable, b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | null/integer/string | no | 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 not |
| UUID | null/string | no | The UUID of the single Riddle you want to move or check. Pass either this or UUIDs. |
| UUIDs | array/null | no | 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 m |
| dryRun | boolean | no | true runs the movability check against the given projectId and changes nothing. Pointless without projectId, which already only checks. |
Reports the current API key: the authenticated user ("userEmail"/"userName", the latter null if never set), the project/team on a project-scoped key, whether this key has full access ("allowsFullAccess", see riddle://reference/concepts/access), and the account's plan in "subscription" ({plan, period, active, created, termEnd, isFreeTrial, daysLeft} - on a free trial "termEnd" is when the trial end
No parameter schema on file.
Creates a new, empty question bank for the given Riddle type ("Quiz" or "Poll"). Add items with question_bank_item(action: "add"), then reference the returned "id" as "questionBankId" on a QuestionBank block of a riddle_builder_create call of the matching "type" - a bank created for "Quiz" can only be referenced from a Quiz, never a Poll, and vice versa. A bank lives in one project and can only be
| Parameter | Type | Required | Notes |
|---|---|---|---|
| riddleType | string | yes | 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. |
| title | null/string | no | The bank's title. Defaults to "New question bank" when omitted. |
| projectId | null/integer | no | 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). |
Lists question banks. Scope "own" (the default) lists the banks of a project - the same ones the Creator shows; pass a projectId to look into another project, omit it for the project the API key is scoped to (your personal ones on a user API key). Paginated {items, page, pageSize, total, hasMore}. Scope "templates" lists the built-in starter banks instead - pre-filled banks anyone can copy with qu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | no | What to list: "own" (default) for the question banks of a project, "templates" for the built-in starter banks anyone can duplicate. |
| riddleType | null/string | no | Filter by Riddle type ("Quiz" or "Poll"). Omit to list banks of every type. Applies to both scopes. |
| tags | array/null | no | Filter by tag IDs (array of integers), as returned by riddle_tag_list. Omit to ignore tags. Scope "own" only. |
| search | null/string | no | Search term to filter banks by title. Scope "own" only. |
| sortBy | null/string | no | Sort field: "createdAt" or "modifiedAt". Defaults to "createdAt". Scope "own" only. |
| sortOrder | null/string | no | Sort direction: "ASC" or "DESC". Defaults to "DESC". Scope "own" only. |
| page | null/integer | no | Page number (default: 1). Scope "own" only. |
| pageSize | null/integer | no | Items per page (default: 12, max: 50). Scope "own" only. |
| projectId | null/integer | no | 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. |
Retrieves one question bank by id: title, riddleType, tags, notes, its categories/blockTypes and whether it has unpublished changes. The items themselves are question_bank_get_items, not included here. Works on a built-in template id from question_bank_list(scope: "templates") to see what it holds before duplicating - a template reads back without owner and tags/notes, belonging to nobody. "catego
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | 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"). |
Everything that acts on a question bank as a whole, by "action" - the items themselves are question_bank_item, and the two calls that only destroy are question_bank_delete and question_bank_discard_changes. A public template id is accepted for "duplicate" only and rejected by every other action. "rename" sets the title and "updateNotes" replaces the plain-text maintainer notes (never shown to part
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The ID of the question bank to act on. |
| action | string | yes | What to do with the bank: "rename" (takes title), "updateNotes" (takes notes), "duplicate" (takes title and optionally projectId) or "publish" (no further parameters). |
| title | null/string | no | The new title for "rename", or the title of the copy for "duplicate". Required for both, rejected for every other action. |
| notes | null/string | no | Plain-text notes for this bank, e.g. sourcing/curation instructions - replaces any existing notes. Required for "updateNotes", rejected for every other action. |
| projectId | null/integer | no | 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. |
Adds or replaces ONE question/item of a question bank, by "action" - deleting one is question_bank_delete. There is no universal item shape: read riddle://reference/question-bank/block-type-columns before the first "add" into a bank you have not populated - it lists the valid blockType values per Riddle type and the "columns" each expects (the blockTypeColumns listing is that document, not a tool)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The ID of the question bank the item belongs to. |
| action | string | yes | What to do: "add" a new item (takes blockType, category, difficulty, columns) or "update" an existing one (the same, plus questionBankItemId). |
| questionBankItemId | null/integer | no | 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". |
| blockType | null/string | no | 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 it |
| category | null/string | no | The item's category - free text, used to filter what a QuestionBank block draws (see the "questionBankCriteria" of the QuestionBank block type). |
| difficulty | null/integer | no | The item's difficulty, 1-10 - also used to filter what a QuestionBank block draws. |
| columns | object | no | 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 tak |
Throws away every unpublished change to a question bank's items at once, resetting each of them to its last published content. Irreversible - there is no undo and no copy of the discarded draft. A pending item delete comes back; an item ADDED since the last publish has no published state and is left alone, so this is not "restore the bank as it was published". Only items are affected: the title an
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The ID of the question bank to discard the unpublished changes of. |
Deletes a question bank or ONE of its items - "target" says which, and nothing else deletes either. target "bank" removes the bank and every item it holds (its tags cleaned up exactly as question_bank_tag(action: "remove") does), and is rejected with QUESTION_BANK_INTERDEPENDENCY while a Riddle of the bank's own project still references it - counting the DRAFT and, on a published Riddle, the live
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The ID of the question bank to delete, or of the bank the item belongs to. |
| target | string | yes | What to delete: "bank" (the bank itself and every item in it) or "item" (one question of it). |
| questionBankItemId | null/integer | no | 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". |
Lists the items of a question bank - its DRAFT content by default, or its published items with published: true. Filter by search term, blockType, category or difficultyRange - the same filters a QuestionBank block draws with. A template id from question_bank_list(scope: "templates") reads too - that is how to preview its questions before duplicating it. Paginated {items, page, pageSize, total, has
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The bank to list items of - your own, or a template id from question_bank_list(scope: "templates"). |
| search | null/string | no | Filter items by their column values (e.g. a question title or a choice). |
| blockType | null/string | no | Filter to one block type (e.g. "SingleChoice"). |
| category | null/string | no | Filter to one category. |
| difficultyRange | array/null | no | Filter to a difficulty range, as [min, max] (e.g. [1, 5]). |
| published | null/boolean | no | 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 |
| page | null/integer | no | Page number, starting at 1 (default: 1). |
| pageSize | null/integer | no | Items per page (default: 250, max: 500). |
Adds a tag to a question bank or removes one from it, by tagName or tagId from riddle_tag_list - exactly one of the two, as riddle_tag does. Question bank tags and Riddle tags are ONE set per project, not two: the same tag applies to banks and Riddles and has the same id in both, which is why the ids come from riddle_tag. "add" reuses the project's tag of that name or creates it, and re-tagging ch
| Parameter | Type | Required | Notes |
|---|---|---|---|
| questionBankId | integer | yes | The ID of the question bank to tag or untag. |
| action | string | yes | "add" the tag to the bank, or "remove" it from the bank. |
| tagName | null/string | no | 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 |
| tagId | null/integer | no | The ID of an existing tag, as returned by riddle_tag_list. Pass either this or tagName. |
Reads the palettes - colors, fonts, button styles, background settings - of a Riddle: every palette it can use (the ones inherited from the account/project default preset included) with all of their values, which one is selected, which values this Riddle overrides, and the built-in palettes to start from. What each value does is riddle://reference/palette/fields. Mind the size: ~30 values per pale
| Parameter | Type | Required | Notes |
|---|---|---|---|
| riddleUUID | string | yes | The UUID of the Riddle whose palettes you want |
| paletteUUID | null/string | no | Return only this palette instead of all of them. Accepts a palette UUID or a built-in palette id like "default:timeless". |
| includeBuiltInPalettes | null/boolean | no | Include the full values of all built-in palettes. Defaults to false, in which case only their ids and names are listed. |
| omit | array | no | 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); "b |
Changes the palette (colors, fonts, button styles, background) of ONE Riddle, as a path => value map, e.g. {"bgColor": "#ffffff", "font.name": "Roboto"} - the paths are palette_get's or riddle://reference/palette/fields. Never affects another Riddle: a palette inherited from the account/project default preset is not changed for the others, the values are stored as an override on this one. A built-
| Parameter | Type | Required | Notes |
|---|---|---|---|
| riddleUUID | string | yes | The UUID of the Riddle you want to restyle. |
| values | object | yes | 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 o |
| paletteUUID | null/string | no | The palette to change. Omit to change the currently selected palette. Pass a built-in id ("default:timeless") to start from that palette. |
| newPaletteName | null/string | no | Create a new palette with this name (copied from paletteUUID / the selected palette) and apply the values to the copy, leaving the original untouched. |
| select | null/boolean | no | Select the palette afterwards so the Riddle actually renders with it. Newly created palettes are always selected. |
Lists the Google Sheets and webhook integrations of a project as {items: [{id, type, name, connectedRiddles}]}. "name" is the value a build takes as publish.integrations.googlesheets / .webhook to connect that integration to a Riddle. A Google Sheet can only be connected in the Creator - with none listed, ask the user to add one there. A Riddle with a FileUpload form field cannot be published with
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | no | Only this kind. Omit for both. |
| projectId | null/integer | no | The project (team) ID, as returned by project_list. Omit for the project the API key is scoped to. |
Builds a new Riddle of any of the nine types from a build configuration: "type" says which kind (see that argument for what each one is and what it needs at a minimum), "build" carries the content. Everything a type accepts is described on the "build" fields themselves, marked with the types it belongs to; the exhaustive per-type shapes are in riddle://reference/riddle-builder/riddle-types, the bl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | yes | 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). P |
| build | object | yes | 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_upd |
| publish | null/boolean | no | 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. |
| queue | null/boolean | no | Whether to queue the creation asynchronously. |
| project | null/integer | no | The project ID; pass NULL for personal project; omit to use the currently selected project. |
| templateId | null/integer | no | 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 |
| omit | array | no | 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 "omittedField |
Edits an existing Riddle of any type with the same build configuration riddle_builder_create takes - but as a merge, not a rebuild: only the fields you send are touched, an omitted one is left exactly as it is. Blocks are addressed by their "id", added with "$create": true, removed with "$delete": true and reordered with "$blocksOrder"; the same grammar edits a block's "items"/"fields" and a Perso
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | string | yes | 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. |
| build | object | yes | 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 tou |
| publish | null/boolean | no | 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 publ |
| omit | array | no | 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 "omittedField |
Dry-runs one or many Riddle Builder creates and/or edits without creating or changing anything: per entry of "builds", the same validation the real call would apply, run against a scratch/deep-copied Riddle that is discarded before this returns - never persisted, never published, no event dispatched. A media URL in the build IS still checked for reachability with a live HEAD request (no content fe
| Parameter | Type | Required | Notes |
|---|---|---|---|
| builds | array | no | The build configs to dry-run, 1 to 20 entries, creates and edits mixable: {type, build} for a would-be creation or {UUID, build} for an edit, exactly one of "type"/"UUID" per entry. "type" is one of Q |
| project | null/integer | no | 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- |
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: re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topics | array | yes | 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: - riddle://reference/index: every document this se |
| riddleType | array | no | 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/ |
| blockTypes | array | no | 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 |
| fieldTypes | array | no | 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" |
| includeAvailableTopics | boolean | no | 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 agai |
Views/starts/submissions of one entity - "namespace" plus "entityId" says which (a project, a user, or a Riddle by UUID), "view" how deeply. "totals": one aggregate for the period. The response IS the entity's stats document: metrics sit in "core_metrics" under "global_stats" (a Riddle) or under "stats" (a user/project aggregate, or an old Riddle) - read only "stats" and a Riddle with real traffic
| Parameter | Type | Required | Notes |
|---|---|---|---|
| view | string | yes | How deeply to measure: "totals" (one aggregate for the period), "timeseries" (that aggregate per consecutive interval, requires dateFrom and dateTo), "breakdown" (the per-block detail, or the per-Ridd |
| namespace | string | yes | Entity type to fetch stats for. |
| entityId | null/string | no | 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 |
| dateFrom | null/string | no | 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 |
| dateTo | null/string | no | End date (inclusive), format: YYYY-MM-DD, e.g. "2026-01-31". Same rules as dateFrom; where a default applies it is today. |
| projectIds | array/null | no | 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 sta |
| page | null/integer | no | 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 |
| sortBy | string | no | 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 give |
Lists the projects this token has access to as {items, page, pageSize, total, hasMore} - the paging every listing of this server answers with (riddle://reference/concepts/response-envelope), here 25 per page, 100 max, so an account with many projects can be paged through; a project API token only ever returns its own project. Each entry is a trimmed summary (id, name, image): project_get adds your
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | null/integer | no | Page number to fetch (1-indexed). Defaults to 1. Zero, negative or non-numeric is rejected, not clamped. |
| pageSize | null/integer | no | How many projects to return per page (max 100). Defaults to 25. Same validation as page; over 100 is rejected, not clamped. |
Returns one project by id - id, name, image and the authenticated user's permission matrix for it. The id comes from project_list or from the "team" of riddle_get. The project's default Riddle settings are NOT included; they are a large nested tree with its own tool, project_get_settings.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | integer | yes | The ID of the project to look up |
Returns the default Riddle settings every new Riddle of the project starts from - PUBLISHED and ENABLED only: "publishSettings" (privacy/DOI/OTP, email automation, tracking, data layer, ...) and "embedSettings" (iframe sizing, auto-scroll, ...), each holding only the areas whose "isDefaultEnabled"/"isEnabled" was on in the last published version. Never-published drafts and disabled areas are delib
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | integer | yes | The ID of the project whose default Riddle settings to return |
Shows the user the current DRAFT of a Riddle as a playable preview - the Riddle as it looks right now, published or not. Call it after riddle_builder_create or riddle_builder_update whenever the user wants to see the result (right after riddle_publish the draft and the live version are identical, so it shows what is live); do not call it on every edit of a multi-step build, once at the end is enou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| UUID | string | yes | The UUID of the Riddle to preview |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Riddle or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.2.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Riddle can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.