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.

Input Schema

TableJSON 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

TableJSON 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. 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"
      +  ]
      +}
  2. 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."
  3. 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"
      +  ]
      +}
  4. 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."
  5. 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"
      +]
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the bar is lower, yet the description still adds real behavioral context: the deck is created if missing, parent decks are created for Parent::Child, cards enter spaced-repetition scheduling, and the batch size is capped at 1-500. It stops short of stating what happens on partial failure against that cap or whether the operation is atomic/idempotent.

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?

The first sentence is long and run-on but front-loads the trigger condition, and the remaining clauses (deck creation, scheduling, cloze syntax, media path, alternative tool) each carry distinct information. Every sentence earns its place, though the opening could be split for faster scanning.

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?

With an output schema present, return values need not be explained, and the description covers the remaining agent-relevant context: creation trigger, deck auto-creation with parents, batch limits, scheduling behavior, and the alternative mutation tool. Nothing an agent needs in order to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the field descriptions are unusually rich, so the baseline is 3. The description adds only marginal meaning — cloze syntax {{c1::answer}} (already in note_type) and the /media/{id} media convention (not in the schema) — while most of the field-level semantics, including the very detailed speech-block rules, live in the schema.

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?

The description states a specific verb+resource ("Saves 1-500 cards into one deck of their Flash account") and names the exact scope (1-500 cards, one deck, created if missing). It also explicitly names the sibling it is not — "To change existing cards use update_cards, not new copies" — so an agent can separate it from update_cards without opening either schema.

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

Usage Guidelines5/5

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

It gives a clear when-to-use trigger ("Use this when the user wants flashcards") with enumerated input sources (notes, slides, a shared file, a named topic, this conversation) and the goal (memorize and review later). It names the alternative for the mutation case (update_cards) with the condition that selects it.

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.