Skip to main content
Glama

Create cards

create_cards

Use this when the user wants flashcards: made from notes, slides or a file they share, a topic they name, or this conversation, or to memorize something and review it later. Saves 1-500 cards into one deck of their Flash account (created if missing, with parents for Parent::Child), where spaced repetition schedules each card's reviews. Follow the field notes; cloze uses {{c1::answer}}; keep media as /media/{id}. To change existing cards use update_cards, not new copies.

Tool call template

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

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "deck": "<deck>",
      "cards": "<cards>"
    },
    "name": "create_cards"
  }
}

Input Schema

NameRequiredDescriptionDefault
deckYesThe deck to add to, by full name, e.g. "Spanish" or "Anatomy::Bones": an existing deck (list_decks has the names), or a new one, created with any missing parents.
cardsYesOn both sides keep the material's own terms, names and numbers. Write what plain text loses as HTML (10<sup>5</sup>, not 105; H<sub>2</sub>O; <br> between lines), and write each text in one script, as the material or the user writes it, never switching alphabets inside a word.
languagesNoThe languages the deck's cards are in, most used first, by ISO 639-1 code ("ja", "en").

Output Schema

NameRequiredDescriptionDefault
noteNoHow to reply when the cards are already on screen; on new cards, also where else the user can study them.
createdYes
updatedYes
card_idsYes
source_idsYes
deck_totalsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / $defs / NewCard / properties / back_speech / description
      Previous value: -"What voice study reads aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included (no voice reads it), as {\"say\":\"look\"}."New value: +"What is read aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included, as {\"say\":\"look\"}."
    • changedInput schema / $defs / NewCard / properties / front_speech / description
      Previous value: -"What voice study reads aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included (no voice reads it), as {\"say\":\"look\"}."New value: +"What is read aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included, as {\"say\":\"look\"}."
    • changedInput schema / $defs / SpeechBlockArg / description
      Previous value: -"One block of what voice reads: words in one language, or a cue."New value: +"One block of what is read aloud: words in one language, or a cue."
  2. Changed7 schema fields changed
    • addedInput schema / $defs / CueBlock
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "say": {
      +      "description": "\"equation\" for a formula too long to read, \"look\" for anything\nthat cannot be said aloud.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "say"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / NewCard / properties / back_speech
      Added value: +{
      +  "description": "What voice study reads aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included (no voice reads it), as {\"say\":\"look\"}.",
      +  "items": {
      +    "$ref": "#/$defs/SpeechBlockArg"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedInput schema / $defs / NewCard / properties / front_speech
      Added value: +{
      +  "description": "What voice study reads aloud of this side, in order, as blocks: [{\"lang\":\"en\",\"text\":\"How do you say cat in Japanese?\"},{\"lang\":\"ja\",\"text\":\"ねこ\"}]. Follow the side as it is written, in its order, never rewording it. Each block is one language, by ISO 639-1 code, with a region where the accent matters (es-MX, es-ES, pt-BR, pt-PT, en-GB); a word in another language inside a sentence is its own block where it stands. Leave out what is not read aloud: citations and sources, a romanization next to the script it spells (romaji, pinyin), emoji, images. Write a word as it is said when its spelling is ambiguous (Japanese kanji in kana, 猫 as ねこ; Chinese in simplified characters). A short formula of a few symbols in words (F = ma as \"F equals m a\"); a long one as {\"say\":\"equation\"}; anything that cannot be said aloud, Cantonese included (no voice reads it), as {\"say\":\"look\"}.",
      +  "items": {
      +    "$ref": "#/$defs/SpeechBlockArg"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • changedInput schema / $defs / NewCard / required
      Previous value: -[
      -  "front_html",
      -  "back_html"
      -]New value: +[
      +  "front_html",
      +  "back_html",
      +  "front_speech",
      +  "back_speech"
      +]
    • addedInput schema / $defs / SayBlock
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "lang": {
      +      "description": "The language the words are in: an ISO 639-1 code, with a region\nwhere the accent matters (\"es-MX\").",
      +      "type": "string"
      +    },
      +    "text": {
      +      "description": "The words, as they are said.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "lang",
      +    "text"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / SpeechBlockArg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/SayBlock"
      +    },
      +    {
      +      "$ref": "#/$defs/CueBlock"
      +    }
      +  ],
      +  "description": "One block of what voice reads: words in one language, or a cue."
      +}
    • addedInput schema / properties / languages
      Added value: +{
      +  "default": null,
      +  "description": "The languages the deck's cards are in, most used first, by ISO 639-1 code (\"ja\", \"en\").",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / note / description
      Previous value: -"Present when the cards are already on screen: how to reply."New value: +"How to reply when the cards are already on screen; on new cards,\nalso where else the user can study them."
  4. Changed2 schema fields changed
    • addedInput schema / properties / deck / description
      Added value: +"The deck to add to, by full name, e.g. \"Spanish\" or \"Anatomy::Bones\":\nan existing deck (list_decks has the names), or a new one, created\nwith any missing parents."
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Present when the cards are already on screen: how to reply.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  5. Changed5 schema fields changed
    • addedInput schema / $defs / NewCard / properties / back_html / description
      Added value: +"The answer to exactly what the front asks, as short as it can be while complete. Anything more (why, an example, a source) comes after the answer, set apart."
    • addedInput schema / $defs / NewCard / properties / front_html / description
      Added value: +"The prompt, answerable on its own: one question, cue or cloze sentence carrying everything needed to answer it (the choices of a multiple-choice question, the context a case depends on). One idea per card: a list, a multi-part rule or a comparison becomes several cards, or a cloze with one blank per part."
    • addedInput schema / $defs / NewCard / properties / note_type / description
      Added value: +"basic (default): one question, one answer. basic_reversed: both directions are worth asking (a word and its translation, a term and its definition). basic_typed: the exact spelling, number or formula matters. cloze: a sentence whose blanks are each their own fact, {{c1::...}}, {{c2::...}}."
    • addedInput schema / $defs / NewCard / properties / tags / description
      Added value: +"A few short lowercase topic words (a chapter, a lesson, a theme), so the user can study one part later."
    • addedInput schema / properties / cards / description
      Added value: +"On both sides keep the material's own terms, names and numbers. Write what plain text loses as HTML (10<sup>5</sup>, not 105; H<sub>2</sub>O; <br> between lines), and write each text in one script, as the material or the user writes it, never switching alphabets inside a word."
  6. Changed18 schema fields changed
    • addedInput schema / $defs / NewCard / additionalProperties
      Added value: +false
    • removedInput schema / $defs / NewCard / properties / back
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / $defs / NewCard / properties / back_html
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / $defs / NewCard / properties / front
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / $defs / NewCard / properties / front_html
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / $defs / NewCard / properties / note_type
      Added value: +{
      +  "default": null,
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedInput schema / $defs / NewCard / properties / tags / default
      Previous value: -nullNew value: +[]
    • removedInput schema / $defs / NewCard / properties / tags / description
      Removed value: -"Optional tags, e.g. [\"exam-2\", \"cardiac\"]"
    • changedInput schema / $defs / NewCard / properties / tags / type
      Previous value: -[
      -  "array",
      -  "null"
      -]New value: +"array"
    • changedInput schema / $defs / NewCard / required
      Previous value: -[
      -  "front",
      -  "back"
      -]New value: +[
      +  "front_html",
      +  "back_html"
      +]
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / deck / description
      Removed value: -"Target deck; created if it doesn't exist."
    • addedOutput schema / properties / card_ids
      Added value: +{
      +  "items": {
      +    "format": "int64",
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / created / description
      Removed value: -"Number of cards created."
    • addedOutput schema / properties / deck_totals
      Added value: +{
      +  "items": {
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "prefixItems": [
      +      {
      +        "format": "int64",
      +        "type": "integer"
      +      },
      +      {
      +        "format": "uint32",
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    ],
      +    "type": "array"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / source_ids
      Added value: +{
      +  "items": {
      +    "format": "int64",
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / updated
      Added value: +{
      +  "format": "uint32",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "created"
      -]New value: +[
      +  "source_ids",
      +  "card_ids",
      +  "created",
      +  "updated",
      +  "deck_totals"
      +]
  7. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=false; the description adds real behavioral context beyond that: the deck is created when missing, nested deck names spawn parents, and review scheduling is attached to the cards. It omits any mention of error/partial-failure behavior on a 500-card batch or permissions, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger, then scope, then format rules, then the alternative tool; no filler sentences. The middle clause about notes/slides/file/topic/conversation is a long enumeration and the final formatting rules are compressed into semicolon fragments, which costs a little readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described. For a 3-parameter creation tool, the description covers trigger conditions, side effects, batch limits, and the formatting conventions an agent must comply with, leaving nothing important unstated.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description adds constraints the schema does not state: the 1-500 card count, cloze syntax {{c1::answer}}, media references as /media/{id}, and the instruction to follow the per-field notes. That is genuine added meaning for the deck/cards arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (create) and resource (cards), plus batch size (1-500), target container (one deck, created if missing, with Parent::Child parents), and the spaced-repetition consequence. It explicitly distinguishes itself from update_cards, which the agent would otherwise confuse with it.

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

Usage Guidelines5/5

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

The opening sentence enumerates concrete triggers: notes, slides, a shared file, a named topic, or the conversation, plus the intent to memorize and review later. It also names the exclusion case (existing cards -> update_cards, not new copies), which is exactly the sibling-routing an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.