Tool tree
gradeNot graded
get_flashcard_formatAnswer
Read this first. Short by default (about 3 KB): the workflow for writing a deck on this site, the rules the site enforces, and the house style. Ask for section "examples" (one card of each kind — choice, truefalse, order, and one with a picture) or "schema" (the deck JSON Schema) when you need them, or "all".
View tool JSON
{
"name": "get_flashcard_format",
"kind": "answer",
"impl": "imperative",
"description": "Read this first. Short by default (about 3 KB): the workflow for writing a deck on this site, the rules the site enforces, and the house style. Ask for section \"examples\" (one card of each kind — choice, truefalse, order, and one with a picture) or \"schema\" (the deck JSON Schema) when you need them, or \"all\".",
"inputSchema": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"guide",
"examples",
"schema",
"all"
],
"description": "What to return. Default \"guide\"."
}
}
},
"page": "/"
}find_flashcard_imagesAnswer
Licensed pictures for a card, from Wikipedia and Wikimedia Commons. Give the exact English Wikipedia article title of the thing when you know it ("Las Meninas", "Hario V60") and a search query otherwise. Returns up to five candidates with a URL sized for the card, the source page, author and license, and a ready-made credit. Put the URL in image (shown while answering — "what is this?" cards) or revealImage (blurred until the answer — "who made X?" cards), describe it in imageAlt without naming the answer, and copy credit into imageCredit. Never invent image URLs.
View tool JSON
{
"name": "find_flashcard_images",
"kind": "answer",
"impl": "imperative",
"description": "Licensed pictures for a card, from Wikipedia and Wikimedia Commons. Give the exact English Wikipedia article title of the thing when you know it (\"Las Meninas\", \"Hario V60\") and a search query otherwise. Returns up to five candidates with a URL sized for the card, the source page, author and license, and a ready-made credit. Put the URL in image (shown while answering — \"what is this?\" cards) or revealImage (blurred until the answer — \"who made X?\" cards), describe it in imageAlt without naming the answer, and copy credit into imageCredit. Never invent image URLs.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What to look for, e.g. \"Bayeux Tapestry\" or \"V60 pour-over dripper\"."
},
"title": {
"type": "string",
"description": "Exact English Wikipedia article title, when known — its lead image comes first."
},
"limit": {
"type": "integer",
"description": "At most this many candidates (1–10). Default 5."
}
},
"required": [
"query"
]
},
"page": "/"
}list_flashcard_decksAnswer
The decks on this page: the built-in one and the decks saved in this browser (with levels, card counts, and the visitor's best scores), plus any drafts still being written.
View tool JSON
{
"name": "list_flashcard_decks",
"kind": "answer",
"impl": "imperative",
"description": "The decks on this page: the built-in one and the decks saved in this browser (with levels, card counts, and the visitor's best scores), plus any drafts still being written.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}get_flashcard_deckAnswer
The full JSON of a deck or draft by slug: every level and card. Use it to review what was written, or as a starting point for a new deck.
View tool JSON
{
"name": "get_flashcard_deck",
"kind": "answer",
"impl": "imperative",
"description": "The full JSON of a deck or draft by slug: every level and card. Use it to review what was written, or as a starting point for a new deck.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "From list_flashcard_decks."
}
},
"required": [
"slug"
]
},
"page": "/"
}start_flashcard_deckAction
Begin writing a deck: give its title, headline (phrased as a question, e.g. "Are you a coffee nerd?"), tagline, verdicts for four score bands, and its levels without cards (id, name, tagline; timed and hidden are optional). Returns the draft's slug. Then call add_flashcards for each level and publish_flashcard_deck when every level has its cards.
View tool JSON
{
"name": "start_flashcard_deck",
"kind": "act",
"impl": "imperative",
"description": "Begin writing a deck: give its title, headline (phrased as a question, e.g. \"Are you a coffee nerd?\"), tagline, verdicts for four score bands, and its levels without cards (id, name, tagline; timed and hidden are optional). Returns the draft's slug. Then call add_flashcards for each level and publish_flashcard_deck when every level has its cards.",
"inputSchema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"headline": {
"type": "string",
"minLength": 1
},
"tagline": {
"type": "string",
"minLength": 1
},
"intro": {
"default": [],
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"cta": {
"default": "Test knowledge",
"type": "string",
"minLength": 1
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri"
}
},
"required": [
"name"
]
},
"passScore": {
"default": 7,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"timerSeconds": {
"default": 20,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"verdicts": {
"type": "object",
"properties": {
"low": {
"type": "string",
"minLength": 1
},
"mid": {
"type": "string",
"minLength": 1
},
"high": {
"type": "string",
"minLength": 1
},
"perfect": {
"type": "string",
"minLength": 1
}
},
"required": [
"low",
"mid",
"high",
"perfect"
]
},
"slug": {
"description": "Optional; derived from the title if missing",
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"levels": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1,
"description": "Shown as \"<name> level\""
},
"tagline": {
"type": "string",
"minLength": 1
},
"timed": {
"default": false,
"type": "boolean"
},
"timerSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"hidden": {
"default": false,
"type": "boolean"
}
},
"required": [
"id",
"name",
"tagline"
]
},
"description": "In play order; each level unlocks the next"
}
},
"required": [
"title",
"headline",
"tagline",
"verdicts",
"levels"
]
},
"page": "/"
}add_flashcardsAction
Append cards to one level of a draft started with start_flashcard_deck. Send any number per call (a whole level of ten, or a few at a time). Each card is a choice (options[0] correct), truefalse, or order card with a one-line fact; ids are assigned when omitted. For a card about something you can look at, add picture: { wikipediaTitle, slot, alt } — the site fetches that Wikipedia article's lead image and credits it, no URL needed. Returns the level's counts, which pictures were attached, and what the draft still needs.
View tool JSON
{
"name": "add_flashcards",
"kind": "act",
"impl": "imperative",
"description": "Append cards to one level of a draft started with start_flashcard_deck. Send any number per call (a whole level of ten, or a few at a time). Each card is a choice (options[0] correct), truefalse, or order card with a one-line fact; ids are assigned when omitted. For a card about something you can look at, add picture: { wikipediaTitle, slot, alt } — the site fetches that Wikipedia article's lead image and credits it, no URL needed. Returns the level's counts, which pictures were attached, and what the draft still needs.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"level": {
"type": "string",
"minLength": 1
},
"cards": {
"minItems": 1,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "choice"
},
"id": {
"description": "Optional; assigned if missing",
"type": "string",
"minLength": 1
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"prompt": {
"type": "string",
"minLength": 1
},
"options": {
"minItems": 2,
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "The first option is the correct one"
},
"image": {
"description": "Shown sharp while answering (\"which movement is this?\")",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"revealImage": {
"description": "Shown blurred while answering, sharpened with the answer",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"imageAlt": {
"description": "What the picture shows, without naming the answer",
"type": "string"
},
"imageCredit": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "The work or subject, e.g. \"Las Meninas\""
},
"author": {
"type": "string",
"minLength": 1,
"description": "Artist or photographer"
},
"license": {
"type": "string",
"minLength": 1,
"description": "e.g. \"Public domain\", \"CC BY-SA 4.0\""
},
"source": {
"type": "string",
"pattern": "^https?:\\/\\/",
"description": "Page the image came from"
}
}
},
"picture": {
"description": "Name the Wikipedia article of the thing pictured; the site fetches and credits the image. Either this or image/revealImage, not both.",
"type": "object",
"properties": {
"wikipediaTitle": {
"type": "string",
"minLength": 1,
"description": "Exact English Wikipedia article title of the thing pictured"
},
"slot": {
"default": "revealImage",
"description": "image: shown while answering (\"what is this?\" cards); revealImage: blurred until the answer (cards the picture would give away). Default revealImage.",
"type": "string",
"enum": [
"image",
"revealImage"
]
},
"alt": {
"type": "string",
"minLength": 1,
"description": "What the picture shows, without naming the answer"
}
},
"required": [
"wikipediaTitle",
"alt"
]
}
},
"required": [
"kind",
"fact",
"prompt",
"options"
]
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "truefalse"
},
"id": {
"description": "Optional; assigned if missing",
"type": "string",
"minLength": 1
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"statement": {
"type": "string",
"minLength": 1
},
"answer": {
"type": "boolean"
},
"revealImage": {
"description": "Shown blurred while answering, sharpened on the reveal",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"imageAlt": {
"description": "What the picture shows, without naming the answer",
"type": "string"
},
"imageCredit": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "The work or subject, e.g. \"Las Meninas\""
},
"author": {
"type": "string",
"minLength": 1,
"description": "Artist or photographer"
},
"license": {
"type": "string",
"minLength": 1,
"description": "e.g. \"Public domain\", \"CC BY-SA 4.0\""
},
"source": {
"type": "string",
"pattern": "^https?:\\/\\/",
"description": "Page the image came from"
}
}
},
"picture": {
"description": "Name the Wikipedia article of the thing pictured; shown blurred until the answer. Either this or revealImage, not both.",
"type": "object",
"properties": {
"wikipediaTitle": {
"type": "string",
"minLength": 1,
"description": "Exact English Wikipedia article title of the thing pictured"
},
"alt": {
"type": "string",
"minLength": 1,
"description": "What the picture shows, without naming the answer"
}
},
"required": [
"wikipediaTitle",
"alt"
]
}
},
"required": [
"kind",
"fact",
"statement",
"answer"
]
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "order"
},
"id": {
"description": "Optional; assigned if missing",
"type": "string",
"minLength": 1
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"prompt": {
"type": "string",
"minLength": 1
},
"items": {
"minItems": 3,
"maxItems": 5,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"value": {
"type": "number",
"description": "Sort key, ascending is correct (a year, a size, a rank…)"
}
},
"required": [
"label",
"value"
]
}
}
},
"required": [
"kind",
"fact",
"prompt",
"items"
]
}
]
}
}
},
"required": [
"slug",
"level",
"cards"
]
},
"page": "/"
}publish_flashcard_deckAction
Validate a draft, save it as a playable deck in this browser, and open the quiz on it (open: false to just save). Errors name what is missing or wrong, by JSON path.
View tool JSON
{
"name": "publish_flashcard_deck",
"kind": "act",
"impl": "imperative",
"description": "Validate a draft, save it as a playable deck in this browser, and open the quiz on it (open: false to just save). Errors name what is missing or wrong, by JSON path.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The draft's slug from start_flashcard_deck."
},
"open": {
"type": "boolean",
"description": "Open the quiz after saving. Default true."
}
},
"required": [
"slug"
]
},
"page": "/"
}import_flashcardsAction
Save a complete deck in one call (the JSON Schema from get_flashcard_format) and open it. If a saved deck already uses the slug, a new slug is chosen unless replace is true. For writing a deck in steps, use start_flashcard_deck instead.
View tool JSON
{
"name": "import_flashcards",
"kind": "act",
"impl": "imperative",
"description": "Save a complete deck in one call (the JSON Schema from get_flashcard_format) and open it. If a saved deck already uses the slug, a new slug is chosen unless replace is true. For writing a deck in steps, use start_flashcard_deck instead.",
"inputSchema": {
"type": "object",
"properties": {
"deck": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"title": {
"type": "string",
"minLength": 1
},
"headline": {
"type": "string",
"minLength": 1
},
"tagline": {
"type": "string",
"minLength": 1
},
"intro": {
"default": [],
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"cta": {
"default": "Test knowledge",
"type": "string",
"minLength": 1
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"passScore": {
"default": 7,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"timerSeconds": {
"default": 20,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"verdicts": {
"type": "object",
"properties": {
"low": {
"type": "string",
"minLength": 1
},
"mid": {
"type": "string",
"minLength": 1
},
"high": {
"type": "string",
"minLength": 1
},
"perfect": {
"type": "string",
"minLength": 1
}
},
"required": [
"low",
"mid",
"high",
"perfect"
],
"additionalProperties": false
},
"levels": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1,
"description": "Shown as \"<name> level\""
},
"tagline": {
"type": "string",
"minLength": 1
},
"timed": {
"default": false,
"type": "boolean"
},
"timerSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"hidden": {
"default": false,
"type": "boolean"
},
"questions": {
"minItems": 1,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "choice"
},
"id": {
"type": "string",
"minLength": 1,
"description": "Unique across the whole deck, e.g. s1, s2"
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"prompt": {
"type": "string",
"minLength": 1
},
"options": {
"minItems": 2,
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "The first option is the correct one"
},
"image": {
"description": "Shown sharp while answering (\"which movement is this?\")",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"revealImage": {
"description": "Shown blurred while answering, sharpened with the answer",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"imageAlt": {
"description": "What the picture shows, without naming the answer",
"type": "string"
},
"imageCredit": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "The work or subject, e.g. \"Las Meninas\""
},
"author": {
"type": "string",
"minLength": 1,
"description": "Artist or photographer"
},
"license": {
"type": "string",
"minLength": 1,
"description": "e.g. \"Public domain\", \"CC BY-SA 4.0\""
},
"source": {
"type": "string",
"pattern": "^https?:\\/\\/",
"description": "Page the image came from"
}
},
"additionalProperties": false
}
},
"required": [
"kind",
"id",
"fact",
"prompt",
"options"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "truefalse"
},
"id": {
"type": "string",
"minLength": 1,
"description": "Unique across the whole deck, e.g. s1, s2"
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"statement": {
"type": "string",
"minLength": 1
},
"answer": {
"type": "boolean"
},
"revealImage": {
"description": "Shown blurred while answering, sharpened on the reveal",
"type": "string",
"minLength": 1,
"pattern": "^(?:\\/[^\\s]*|https:\\/\\/[^\\s]+)$"
},
"imageAlt": {
"description": "What the picture shows, without naming the answer",
"type": "string"
},
"imageCredit": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "The work or subject, e.g. \"Las Meninas\""
},
"author": {
"type": "string",
"minLength": 1,
"description": "Artist or photographer"
},
"license": {
"type": "string",
"minLength": 1,
"description": "e.g. \"Public domain\", \"CC BY-SA 4.0\""
},
"source": {
"type": "string",
"pattern": "^https?:\\/\\/",
"description": "Page the image came from"
}
},
"additionalProperties": false
}
},
"required": [
"kind",
"id",
"fact",
"statement",
"answer"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "order"
},
"id": {
"type": "string",
"minLength": 1,
"description": "Unique across the whole deck, e.g. s1, s2"
},
"fact": {
"type": "string",
"minLength": 1,
"description": "One-line explanation shown on the reveal, whatever the answer"
},
"prompt": {
"type": "string",
"minLength": 1
},
"items": {
"minItems": 3,
"maxItems": 5,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"value": {
"type": "number",
"description": "Sort key, ascending is correct (a year, a size, a rank…)"
}
},
"required": [
"label",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"kind",
"id",
"fact",
"prompt",
"items"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"id",
"name",
"tagline",
"timed",
"hidden",
"questions"
],
"additionalProperties": false
}
}
},
"required": [
"slug",
"title",
"headline",
"tagline",
"intro",
"cta",
"passScore",
"timerSeconds",
"verdicts",
"levels"
],
"additionalProperties": false
},
"replace": {
"type": "boolean",
"description": "Overwrite a saved deck with the same slug. Default false."
}
},
"required": [
"deck"
]
},
"page": "/"
}share_flashcard_deckAction
A link anyone can open to play a deck saved in this browser: the deck is stored on the site under a short URL (/d/<id>) that unfurls with its headline and pictures. The site does this on its own while the visitor plays a deck the first time; call it to have the link sooner, or to hand it to the visitor. Needs the deployment to have a blob store — the error says so otherwise.
View tool JSON
{
"name": "share_flashcard_deck",
"kind": "act",
"impl": "imperative",
"description": "A link anyone can open to play a deck saved in this browser: the deck is stored on the site under a short URL (/d/<id>) that unfurls with its headline and pictures. The site does this on its own while the visitor plays a deck the first time; call it to have the link sooner, or to hand it to the visitor. Needs the deployment to have a blob store — the error says so otherwise.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "A saved deck's slug (list_flashcard_decks)."
}
},
"required": [
"slug"
]
},
"page": "/"
}generate_flashcardsAction
Ask the site's own AI (Claude, on the server) to plan and write a deck about a topic, then open it: the first level is ready in under a minute and the quiz opens on it; the rest are written in the background. Only works when the deployment has a key — if it doesn't, write the deck yourself with start_flashcard_deck, add_flashcards and publish_flashcard_deck.
View tool JSON
{
"name": "generate_flashcards",
"kind": "act",
"impl": "imperative",
"description": "Ask the site's own AI (Claude, on the server) to plan and write a deck about a topic, then open it: the first level is ready in under a minute and the quiz opens on it; the rest are written in the background. Only works when the deployment has a key — if it doesn't, write the deck yourself with start_flashcard_deck, add_flashcards and publish_flashcard_deck.",
"inputSchema": {
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "What the visitor wants to learn, e.g. \"The French Revolution\" or \"Coffee brewing\"."
},
"notes": {
"type": "string",
"description": "Optional guidance: angle, difficulty, audience, images to use."
}
},
"required": [
"topic"
]
},
"page": "/"
}play_flashcardsAction
Open the quiz for a deck. Omit the slug for the built-in deck; list_flashcard_decks shows the others. The visitor then plays: levels unlock in order by reaching passScore.
View tool JSON
{
"name": "play_flashcards",
"kind": "act",
"impl": "imperative",
"description": "Open the quiz for a deck. Omit the slug for the built-in deck; list_flashcard_decks shows the others. The visitor then plays: levels unlock in order by reaching passScore.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "A deck slug from list_flashcard_decks."
}
}
},
"page": "/"
}delete_flashcard_deckSensitive Action
Remove a saved deck or a draft from this browser. The built-in deck can't be deleted. Best scores for the deck are kept out of the way but not erased.
View tool JSON
{
"name": "delete_flashcard_deck",
"kind": "transact",
"impl": "imperative",
"description": "Remove a saved deck or a draft from this browser. The built-in deck can't be deleted. Best scores for the deck are kept out of the way but not erased.",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
]
},
"page": "/"
}