Koskamo

Lingard Vocab MCP

An official MCP server by Lingard that allows AI assistants to interact with a user's Lingard vocabulary library. It enables reading learning contexts, creating topic-based collections, enriching flashcards with translations and examples, and attaching images, without exposing delete tools.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Lingard Vocab MCP logo, by LingardVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Lingard
You need:Connect only from an AI client you trust.The setup opens Lingard sign-in and asks for scoped access.Read access lets the assistant inspect learning context and cards.Write access lets it create or update collections and cards.
MCP endpoint (Streamable HTTP)
https://lingard.app/mcp
Vendor documentation

What you can do with it

  • Show my English learning context
  • Create a German Lingard collection named Berlin travel basics with 8 complete cards for A2 level
  • Find words missing examples in my Berlin travel basics collection and fill them
  • Suggest Spanish travel words at my level and add them to a new Lingard collection

Source and maintenance

Vendor evidenceRegistry 0.5.8

Protocol and capabilities

Server
lingard-vocab 0.5.9
MCP protocol
2025-06-18
Tools
15 advertised
Resources
7 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "resources": {}
}

Tools

15 advertised

search — Search Lingard Vocab
Advertised by the server during the last successful anonymous check.
Advertised read-only

Searches the user's live Lingard account: vocabulary, learning context, English profile, totals, collection titles, saved words, flashcards, and missing vocabulary fields. Results are read from Firestore at the time of the call.

search input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Alias for query."
    },
    "query": {
      "type": "string",
      "description": "Search query, for example \"English learning context\" or \"saved vocabulary collections\"."
    },
    "targetLang": {
      "type": "string",
      "description": "Lingard target language code such as en, de, es, fr, it, pl, or pt. Defaults to en when the prompt asks about English."
    }
  }
}
search output schema
{
  "type": "object",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "uri": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "targetLang": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": true
}
search annotations
{
  "title": "Search Lingard Vocab",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Fetch Lingard Vocab Record
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetches the full live Lingard JSON record for a search-result id (e.g. "learning-context:en") or a Lingard resource URI such as lingard://learning-context/en.

fetch input schema
{
  "type": "object",
  "anyOf": [
    {
      "required": [
        "id"
      ]
    },
    {
      "required": [
        "uri"
      ]
    },
    {
      "required": [
        "targetLang"
      ]
    }
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Preferred selector: a search-result id, e.g. \"learning-context:en\". Takes `id` OR `uri` (not both); if both are given, `id` wins."
    },
    "uri": {
      "type": "string",
      "description": "Alternative selector, used only when `id` is omitted: a Lingard resource URI, e.g. \"lingard://learning-context/en\"."
    },
    "targetLang": {
      "type": "string",
      "description": "Fallback used only when neither `id` nor `uri` is provided: a language code (en, de, es, fr, it, pl, pt) whose learning context to fetch."
    }
  },
  "description": "The record is identified by exactly one of `id` or `uri`. If both are sent, `id` is used. If neither is sent, `targetLang` selects that language's learning context."
}
fetch output schema
{
  "type": "object",
  "required": [
    "id",
    "uri",
    "title",
    "text",
    "data"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "uri": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "required": [
        "ok",
        "targetLang",
        "profile",
        "totals",
        "collections"
      ],
      "properties": {
        "ok": {
          "type": "boolean"
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "totals": {
          "type": "object",
          "properties": {
            "cards": {
              "type": "integer"
            },
            "truncated": {
              "type": "boolean"
            },
            "collections": {
              "type": "integer"
            }
          },
          "additionalProperties": true
        },
        "profile": {
          "type": "object",
          "properties": {
            "level": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "wordRank": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "bookTopics": {
              "anyOf": [
                {
                  "type": "array"
                },
                {
                  "type": "object"
                },
                {
                  "type": "null"
                }
              ]
            },
            "nativeLang": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "targetLang": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": true
        },
        "targetLang": {
          "type": "string"
        },
        "collections": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "pic": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "uuid": {
                "type": "string"
              },
              "color": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "source": {
                "enum": [
                  "user",
                  "catalog",
                  "unfiled"
                ],
                "type": "string"
              },
              "missing": {
                "type": "object",
                "properties": {
                  "pos": {
                    "type": "integer"
                  },
                  "form": {
                    "type": "integer"
                  },
                  "pron": {
                    "type": "integer"
                  },
                  "syns": {
                    "type": "integer"
                  },
                  "image": {
                    "type": "integer"
                  },
                  "examples": {
                    "type": "integer"
                  },
                  "translate": {
                    "type": "integer"
                  }
                },
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "readOnly": {
                "type": "boolean"
              },
              "writable": {
                "enum": [
                  "full",
                  "cards_only",
                  "none"
                ],
                "type": "string"
              },
              "cardCount": {
                "type": "integer"
              },
              "updatedAt": {
                "type": "number"
              },
              "contentSource": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "text": {
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
fetch annotations
{
  "title": "Fetch Lingard Vocab record",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_get_learning_context — Get Lingard Learning Context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the user's current Lingard learning context, read live from their account: English profile, vocabulary totals, saved collections and their titles, card counts, and missing-field stats. Earlier answers in the conversation may be out of date; this is the account as it stands now. The list covers every collection the account has, so the per-collection counts add up to the card total (totals.truncated marks a library too large to list in full). Every collection reports `source`: "user" (made by the user), "catalog" (a curated Lingard collection — read-only, its words come from the Lingard catalog) and "unfiled" (the bucket of cards saved while reading, which belong to no collection). Catalog and unfiled entries carry titles the user did not choose; they belong to the same account all the same.

lingard_get_learning_context input schema
{
  "type": "object",
  "required": [
    "targetLang"
  ],
  "properties": {
    "targetLang": {
      "type": "string"
    }
  }
}
lingard_get_learning_context output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "profile",
    "totals",
    "collections"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "totals": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "integer"
        },
        "truncated": {
          "type": "boolean"
        },
        "collections": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "profile": {
      "type": "object",
      "properties": {
        "level": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "wordRank": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "bookTopics": {
          "anyOf": [
            {
              "type": "array"
            },
            {
              "type": "object"
            },
            {
              "type": "null"
            }
          ]
        },
        "nativeLang": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "targetLang": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "collections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pic": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "uuid": {
            "type": "string"
          },
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "type": "string"
          },
          "source": {
            "enum": [
              "user",
              "catalog",
              "unfiled"
            ],
            "type": "string"
          },
          "missing": {
            "type": "object",
            "properties": {
              "pos": {
                "type": "integer"
              },
              "form": {
                "type": "integer"
              },
              "pron": {
                "type": "integer"
              },
              "syns": {
                "type": "integer"
              },
              "image": {
                "type": "integer"
              },
              "examples": {
                "type": "integer"
              },
              "translate": {
                "type": "integer"
              }
            },
            "additionalProperties": {
              "type": "integer"
            }
          },
          "readOnly": {
            "type": "boolean"
          },
          "writable": {
            "enum": [
              "full",
              "cards_only",
              "none"
            ],
            "type": "string"
          },
          "cardCount": {
            "type": "integer"
          },
          "updatedAt": {
            "type": "number"
          },
          "contentSource": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  },
  "additionalProperties": true
}
lingard_get_learning_context annotations
{
  "title": "Get Lingard learning context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_get_vocab_collection — Get Lingard Vocabulary Collection
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns live cards from one Lingard vocabulary collection by UUID or title, including curated Lingard collections and the "Words not in a collection" bucket of cards saved while reading. With includeExamples:true it also returns each card's example sentences and their translations, which editing examples starts from.

lingard_get_vocab_collection input schema
{
  "type": "object",
  "required": [
    "targetLang"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 1000,
      "minimum": 1,
      "description": "Optional max number of cards to return (1–1000)."
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string",
      "description": "Collection selector (preferred): its UUID. One of `collectionUuid` or `collectionTitle` is required."
    },
    "collectionTitle": {
      "type": "string",
      "description": "Collection selector (alternative to `collectionUuid`): the collection title."
    },
    "includeExamples": {
      "type": "boolean",
      "description": "Default false. True returns the full example rows (`examples`: example text, translation line, enabled flag) for every card instead of just the `exampleCount`."
    }
  },
  "description": "Identify the collection with `collectionUuid` or `collectionTitle` (provide one; UUID wins if both are given)."
}
lingard_get_vocab_collection output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "cards"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "hint": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pos": {
            "type": "string"
          },
          "form": {
            "type": "string"
          },
          "pron": {
            "type": "string"
          },
          "syns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "title": {
            "type": "string"
          },
          "cardId": {
            "type": "string"
          },
          "examples": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "c": {
                  "type": "string",
                  "description": "Example sentence in the target language, with the target word wrapped in {}."
                },
                "e": {
                  "type": "boolean",
                  "description": "Whether the example is enabled on the card."
                },
                "t": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Translation line, or null when the example is deliberately left untranslated."
                }
              },
              "additionalProperties": true
            },
            "description": "Example rows, returned only when the call asked for includeExamples:true."
          },
          "hasImage": {
            "type": "boolean"
          },
          "learning": {
            "anyOf": [
              {
                "type": "object",
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          },
          "translate": {
            "type": "string"
          },
          "updatedAt": {
            "type": "number"
          },
          "sourceType": {
            "type": "string"
          },
          "hasExamples": {
            "type": "boolean",
            "description": "True when the card carries examples with the target word highlighted. Independent of whether they are translated."
          },
          "exampleCount": {
            "type": "integer",
            "description": "Number of examples stored on the card. Request includeExamples:true to read their text."
          }
        },
        "additionalProperties": true
      }
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "title": {
          "type": "string"
        },
        "source": {
          "enum": [
            "user",
            "catalog",
            "unfiled"
          ],
          "type": "string"
        },
        "readOnly": {
          "type": "boolean"
        },
        "writable": {
          "enum": [
            "full",
            "cards_only",
            "none"
          ],
          "type": "string"
        },
        "updatedAt": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
lingard_get_vocab_collection annotations
{
  "title": "Get Lingard vocabulary collection",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_get_collection_gaps — Get Lingard Collection Gaps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns live Lingard cards in a collection that are missing requested fields such as translation, POS, pronunciation, examples, or image. A curated Lingard collection always reports zero gaps: its words come from the Lingard catalog and are not the user's to fill.

lingard_get_collection_gaps input schema
{
  "type": "object",
  "required": [
    "targetLang"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 1000,
      "minimum": 1
    },
    "fields": {
      "type": "array",
      "items": {
        "enum": [
          "translate",
          "translation",
          "pos",
          "pron",
          "ipa",
          "form",
          "syns",
          "synonyms",
          "examples",
          "image"
        ],
        "type": "string"
      },
      "description": "Optional. An ARRAY of field-name strings, not a bare string: e.g. [\"translation\"] for one field or [\"translation\",\"image\"] for several. Returns cards missing ANY listed field; without it every field is checked."
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string",
      "description": "Collection selector: its UUID. One of `collectionUuid` or `collectionTitle` is required (UUID wins if both are given)."
    },
    "collectionTitle": {
      "type": "string",
      "description": "Collection selector (alternative to `collectionUuid`): the collection title."
    }
  }
}
lingard_get_collection_gaps output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "requestedFields",
    "summary",
    "cards"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "cardId": {
            "type": "string"
          },
          "current": {
            "type": "object",
            "additionalProperties": true
          },
          "missingFields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      }
    },
    "summary": {
      "type": "object",
      "properties": {
        "returned": {
          "type": "integer"
        },
        "cardsWithGaps": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "title": {
          "type": "string"
        },
        "source": {
          "enum": [
            "user",
            "catalog",
            "unfiled"
          ],
          "type": "string"
        },
        "readOnly": {
          "type": "boolean"
        },
        "writable": {
          "enum": [
            "full",
            "cards_only",
            "none"
          ],
          "type": "string"
        },
        "updatedAt": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "requestedFields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": true
}
lingard_get_collection_gaps annotations
{
  "title": "Get Lingard collection gaps",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_get_word_suggestion_context — Get Lingard Word Suggestion Context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns live Lingard profile level, topic, collection context, and the words the user already has: the context for suggesting level-appropriate new cards that are not duplicates.

lingard_get_word_suggestion_context input schema
{
  "type": "object",
  "required": [
    "targetLang"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "level": {
      "type": "string"
    },
    "topic": {
      "type": "string"
    },
    "targetLang": {
      "type": "string"
    },
    "excludeLimit": {
      "type": "integer",
      "maximum": 5000,
      "minimum": 100
    },
    "collectionUuid": {
      "type": "string"
    },
    "collectionTitle": {
      "type": "string"
    }
  }
}
lingard_get_word_suggestion_context output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "requestedCount",
    "exclusions",
    "guidance"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "level": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "topic": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "guidance": {
      "type": "object",
      "additionalProperties": true
    },
    "wordRank": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ]
    },
    "collection": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "pic": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "uuid": {
              "type": "string"
            },
            "color": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "existingCardsInCollection": {
              "type": "integer"
            }
          },
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    },
    "exclusions": {
      "type": "object",
      "properties": {
        "truncated": {
          "type": "boolean"
        },
        "returnedWords": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "totalExistingWords": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "nativeLang": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "targetLang": {
      "type": "string"
    },
    "requestedCount": {
      "type": "integer"
    }
  },
  "additionalProperties": true
}
lingard_get_word_suggestion_context annotations
{
  "title": "Get Lingard word suggestion context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_preview_vocab_changes — Preview Lingard Vocabulary Changes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Previews a Lingard vocabulary collection/card change without writing to Firestore. Cards are checked as on commit. Unless allowIncompleteCards is true, a new card needs title, translate, pos, pron/ipa, syns, and examples with translations; image is optional. A German or Romance noun title carries its dictionary article when one is used, e.g. der Hund, die Reise, das Haus. In example text and example translation the target word and the translated word are marked with {}. form is not part of speech: it holds the inflected-form category of the current word and stays empty for base forms.

lingard_preview_vocab_changes input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "change"
  ],
  "properties": {
    "change": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string",
          "description": "Optional Lingard standard collection icon raw value, for example collection.plane or plane."
        },
        "icon": {
          "type": "string",
          "description": "Alias for pic."
        },
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ipa": {
                "type": "string",
                "description": "Alias for pron; IPA transcription."
              },
              "pos": {
                "type": "string",
                "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
              },
              "form": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
              },
              "pron": {
                "type": "string",
                "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
              },
              "syns": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
              },
              "word": {
                "type": "string",
                "description": "Alias for title; a German/Romance noun carries its article here too."
              },
              "title": {
                "type": "string",
                "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
              },
              "examples": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "c": {
                          "type": "string"
                        },
                        "e": {
                          "type": "boolean"
                        },
                        "t": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Translation line. Empty string or null stores the example without a translation."
                        },
                        "enabled": {
                          "type": "boolean"
                        },
                        "example": {
                          "type": "string"
                        },
                        "collocate": {
                          "type": "string"
                        },
                        "translate": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "translation": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      }
                    }
                  ]
                },
                "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
              },
              "synonyms": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Alias for syns."
              },
              "translate": {
                "type": "string",
                "description": "Translation into the user native language."
              },
              "clearFields": {
                "type": "array",
                "items": {
                  "enum": [
                    "form",
                    "grammatical_form",
                    "formType",
                    "form_type"
                  ],
                  "type": "string"
                },
                "description": "[\"form\"] clears an existing incorrect grammatical form when the current word is base/unmarked. Only form is supported."
              },
              "translation": {
                "type": "string",
                "description": "Alias for translate."
              },
              "allowMissingArticle": {
                "type": "boolean",
                "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
              }
            },
            "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
            "additionalProperties": true
          }
        },
        "color": {
          "type": "string",
          "description": "Optional Lingard collection color. Accepts Swift raw hex like ff9500 or names like orange."
        },
        "title": {
          "type": "string"
        },
        "topic": {
          "type": "string"
        },
        "words": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ipa": {
                "type": "string",
                "description": "Alias for pron; IPA transcription."
              },
              "pos": {
                "type": "string",
                "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
              },
              "form": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
              },
              "pron": {
                "type": "string",
                "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
              },
              "syns": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
              },
              "word": {
                "type": "string",
                "description": "Alias for title; a German/Romance noun carries its article here too."
              },
              "title": {
                "type": "string",
                "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
              },
              "examples": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "c": {
                          "type": "string"
                        },
                        "e": {
                          "type": "boolean"
                        },
                        "t": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Translation line. Empty string or null stores the example without a translation."
                        },
                        "enabled": {
                          "type": "boolean"
                        },
                        "example": {
                          "type": "string"
                        },
                        "collocate": {
                          "type": "string"
                        },
                        "translate": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "translation": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      }
                    }
                  ]
                },
                "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
              },
              "synonyms": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Alias for syns."
              },
              "translate": {
                "type": "string",
                "description": "Translation into the user native language."
              },
              "clearFields": {
                "type": "array",
                "items": {
                  "enum": [
                    "form",
                    "grammatical_form",
                    "formType",
                    "form_type"
                  ],
                  "type": "string"
                },
                "description": "[\"form\"] clears an existing incorrect grammatical form when the current word is base/unmarked. Only form is supported."
              },
              "translation": {
                "type": "string",
                "description": "Alias for translate."
              },
              "allowMissingArticle": {
                "type": "boolean",
                "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
              }
            },
            "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
            "additionalProperties": true
          }
        },
        "mergeMode": {
          "enum": [
            "fill_missing",
            "overwrite_non_empty",
            "add_only"
          ],
          "type": "string"
        },
        "targetLang": {
          "type": "string"
        },
        "collectionUuid": {
          "type": "string"
        },
        "collectionTitle": {
          "type": "string"
        },
        "createIfMissing": {
          "type": "boolean"
        },
        "allowIncompleteCards": {
          "type": "boolean",
          "description": "Default false. True marks the change as a sparse or exact import that the user asked for; it lets cards through without the complete-card fields (title, translate, pos, pron/ipa, syns, examples with translations, the dictionary article on a German/Romance noun title, {} highlights in examples). form is needed only when the current word is an inflected form."
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    }
  }
}
lingard_preview_vocab_changes output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "summary",
    "changes",
    "payload"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "changes": {
      "type": "object",
      "additionalProperties": true
    },
    "payload": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "vocabCollections": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "warnings": {
          "type": "integer"
        },
        "cardsCreated": {
          "type": "integer"
        },
        "cardsSkipped": {
          "type": "integer"
        },
        "cardsUpdated": {
          "type": "integer"
        },
        "collectionsCreated": {
          "type": "integer"
        },
        "collectionsTouched": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "mergeMode": {
      "type": "string"
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "styleSource": {
          "type": "string"
        },
        "inferredStyle": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_preview_vocab_changes annotations
{
  "title": "Preview Lingard vocabulary changes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
lingard_commit_vocab_changes — Commit Lingard Vocabulary Changes
Advertised by the server during the last successful anonymous check.
Advertised destructive

Commits a previously previewed or freshly supplied Lingard vocabulary change. Unless allowIncompleteCards is true, a new card needs title, translate, pos, pron/ipa, syns, and examples with translations; image is optional. A German or Romance noun title carries its dictionary article when one is used, e.g. der Hund, die Reise, das Haus. In example text and example translation the target word and the translated word are marked with {}. form is not part of speech: it holds the inflected-form category of the current word and stays empty for base forms. This is the tool that corrects existing cards: mergeMode:"overwrite_non_empty" replaces values that are already filled in and clearFields:["form"] clears a wrong grammatical form, which is why it is marked destructive.

lingard_commit_vocab_changes input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "change"
  ],
  "properties": {
    "change": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string",
          "description": "Optional Lingard standard collection icon raw value, for example collection.plane or plane."
        },
        "icon": {
          "type": "string",
          "description": "Alias for pic."
        },
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ipa": {
                "type": "string",
                "description": "Alias for pron; IPA transcription."
              },
              "pos": {
                "type": "string",
                "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
              },
              "form": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
              },
              "pron": {
                "type": "string",
                "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
              },
              "syns": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
              },
              "word": {
                "type": "string",
                "description": "Alias for title; a German/Romance noun carries its article here too."
              },
              "title": {
                "type": "string",
                "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
              },
              "examples": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "c": {
                          "type": "string"
                        },
                        "e": {
                          "type": "boolean"
                        },
                        "t": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Translation line. Empty string or null stores the example without a translation."
                        },
                        "enabled": {
                          "type": "boolean"
                        },
                        "example": {
                          "type": "string"
                        },
                        "collocate": {
                          "type": "string"
                        },
                        "translate": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "translation": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      }
                    }
                  ]
                },
                "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
              },
              "synonyms": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Alias for syns."
              },
              "translate": {
                "type": "string",
                "description": "Translation into the user native language."
              },
              "clearFields": {
                "type": "array",
                "items": {
                  "enum": [
                    "form",
                    "grammatical_form",
                    "formType",
                    "form_type"
                  ],
                  "type": "string"
                },
                "description": "[\"form\"] clears an existing incorrect grammatical form when the current word is base/unmarked. Only form is supported."
              },
              "translation": {
                "type": "string",
                "description": "Alias for translate."
              },
              "allowMissingArticle": {
                "type": "boolean",
                "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
              }
            },
            "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
            "additionalProperties": true
          }
        },
        "color": {
          "type": "string",
          "description": "Optional Lingard collection color. Accepts Swift raw hex like ff9500 or names like orange."
        },
        "title": {
          "type": "string"
        },
        "topic": {
          "type": "string"
        },
        "words": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ipa": {
                "type": "string",
                "description": "Alias for pron; IPA transcription."
              },
              "pos": {
                "type": "string",
                "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
              },
              "form": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
              },
              "pron": {
                "type": "string",
                "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
              },
              "syns": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
              },
              "word": {
                "type": "string",
                "description": "Alias for title; a German/Romance noun carries its article here too."
              },
              "title": {
                "type": "string",
                "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
              },
              "examples": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "c": {
                          "type": "string"
                        },
                        "e": {
                          "type": "boolean"
                        },
                        "t": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Translation line. Empty string or null stores the example without a translation."
                        },
                        "enabled": {
                          "type": "boolean"
                        },
                        "example": {
                          "type": "string"
                        },
                        "collocate": {
                          "type": "string"
                        },
                        "translate": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "translation": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      }
                    }
                  ]
                },
                "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
              },
              "synonyms": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Alias for syns."
              },
              "translate": {
                "type": "string",
                "description": "Translation into the user native language."
              },
              "clearFields": {
                "type": "array",
                "items": {
                  "enum": [
                    "form",
                    "grammatical_form",
                    "formType",
                    "form_type"
                  ],
                  "type": "string"
                },
                "description": "[\"form\"] clears an existing incorrect grammatical form when the current word is base/unmarked. Only form is supported."
              },
              "translation": {
                "type": "string",
                "description": "Alias for translate."
              },
              "allowMissingArticle": {
                "type": "boolean",
                "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
              }
            },
            "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
            "additionalProperties": true
          }
        },
        "mergeMode": {
          "enum": [
            "fill_missing",
            "overwrite_non_empty",
            "add_only"
          ],
          "type": "string"
        },
        "targetLang": {
          "type": "string"
        },
        "collectionUuid": {
          "type": "string"
        },
        "collectionTitle": {
          "type": "string"
        },
        "createIfMissing": {
          "type": "boolean"
        },
        "allowIncompleteCards": {
          "type": "boolean",
          "description": "Default false. True marks the change as a sparse or exact import that the user asked for; it lets cards through without the complete-card fields (title, translate, pos, pron/ipa, syns, examples with translations, the dictionary article on a German/Romance noun title, {} highlights in examples). form is needed only when the current word is an inflected form."
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    }
  }
}
lingard_commit_vocab_changes output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "summary",
    "changes",
    "payload"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "changes": {
      "type": "object",
      "additionalProperties": true
    },
    "payload": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "vocabCollections": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "warnings": {
          "type": "integer"
        },
        "cardsCreated": {
          "type": "integer"
        },
        "cardsSkipped": {
          "type": "integer"
        },
        "cardsUpdated": {
          "type": "integer"
        },
        "collectionsCreated": {
          "type": "integer"
        },
        "collectionsTouched": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "mergeMode": {
      "type": "string"
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "styleSource": {
          "type": "string"
        },
        "inferredStyle": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_commit_vocab_changes annotations
{
  "title": "Commit Lingard vocabulary changes",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
lingard_create_vocab_collection — Create Lingard Vocabulary Collection
Advertised by the server during the last successful anonymous check.

Creates a Lingard vocabulary collection, optionally with initial cards; commit=true writes it. Unless allowIncompleteCards is true, a new card needs title, translate, pos, pron/ipa, syns, and examples with translations; image is optional. A German or Romance noun title carries its dictionary article when one is used, e.g. der Hund, die Reise, das Haus. In example text and example translation the target word and the translated word are marked with {}. form is not part of speech: it holds the inflected-form category of the current word and stays empty for base forms.

lingard_create_vocab_collection input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "collectionTitle"
  ],
  "properties": {
    "pic": {
      "type": "string"
    },
    "icon": {
      "type": "string"
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ipa": {
            "type": "string",
            "description": "Alias for pron; IPA transcription."
          },
          "pos": {
            "type": "string",
            "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
          },
          "form": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
          },
          "pron": {
            "type": "string",
            "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
          },
          "syns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
          },
          "word": {
            "type": "string",
            "description": "Alias for title; a German/Romance noun carries its article here too."
          },
          "title": {
            "type": "string",
            "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
          },
          "examples": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "c": {
                      "type": "string"
                    },
                    "e": {
                      "type": "boolean"
                    },
                    "t": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Translation line. Empty string or null stores the example without a translation."
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "example": {
                      "type": "string"
                    },
                    "collocate": {
                      "type": "string"
                    },
                    "translate": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "translation": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
          },
          "synonyms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Alias for syns."
          },
          "translate": {
            "type": "string",
            "description": "Translation into the user native language."
          },
          "translation": {
            "type": "string",
            "description": "Alias for translate."
          },
          "allowMissingArticle": {
            "type": "boolean",
            "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
          }
        },
        "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
        "additionalProperties": true
      }
    },
    "color": {
      "type": "string"
    },
    "topic": {
      "type": "string"
    },
    "commit": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    },
    "collectionTitle": {
      "type": "string"
    },
    "allowIncompleteCards": {
      "type": "boolean",
      "description": "Default false. True marks the cards as a sparse import that the user asked for; it lets them through without the complete-card fields (everything except image, the dictionary article on a German/Romance noun title, {} highlights in examples)."
    }
  }
}
lingard_create_vocab_collection output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "summary",
    "changes",
    "payload"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "changes": {
      "type": "object",
      "additionalProperties": true
    },
    "payload": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "vocabCollections": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "warnings": {
          "type": "integer"
        },
        "cardsCreated": {
          "type": "integer"
        },
        "cardsSkipped": {
          "type": "integer"
        },
        "cardsUpdated": {
          "type": "integer"
        },
        "collectionsCreated": {
          "type": "integer"
        },
        "collectionsTouched": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "mergeMode": {
      "type": "string"
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "styleSource": {
          "type": "string"
        },
        "inferredStyle": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_create_vocab_collection annotations
{
  "title": "Create Lingard vocabulary collection",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
lingard_add_words_to_collection — Add Lingard Words To Collection
Advertised by the server during the last successful anonymous check.

Adds cards to an existing Lingard collection, deduplicating by normalized word title; commit=true writes them. Only collections with writable="full" accept new cards: curated Lingard collections are read-only and the unfiled bucket takes no new cards. Unless allowIncompleteCards is true, a new card needs title, translate, pos, pron/ipa, syns, and examples with translations; image is optional. A German or Romance noun title carries its dictionary article when one is used, e.g. der Hund, die Reise, das Haus. In example text and example translation the target word and the translated word are marked with {}. form is not part of speech: it holds the inflected-form category of the current word and stays empty for base forms. It only adds: a word already in the collection gets its empty fields filled (mergeMode "fill_missing", the default) or is left alone ("add_only"); a value that is already filled in is never changed or cleared.

lingard_add_words_to_collection input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "cards"
  ],
  "properties": {
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ipa": {
            "type": "string",
            "description": "Alias for pron; IPA transcription."
          },
          "pos": {
            "type": "string",
            "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
          },
          "form": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
          },
          "pron": {
            "type": "string",
            "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
          },
          "syns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
          },
          "word": {
            "type": "string",
            "description": "Alias for title; a German/Romance noun carries its article here too."
          },
          "title": {
            "type": "string",
            "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
          },
          "examples": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "c": {
                      "type": "string"
                    },
                    "e": {
                      "type": "boolean"
                    },
                    "t": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Translation line. Empty string or null stores the example without a translation."
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "example": {
                      "type": "string"
                    },
                    "collocate": {
                      "type": "string"
                    },
                    "translate": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "translation": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
          },
          "synonyms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Alias for syns."
          },
          "translate": {
            "type": "string",
            "description": "Translation into the user native language."
          },
          "translation": {
            "type": "string",
            "description": "Alias for translate."
          },
          "allowMissingArticle": {
            "type": "boolean",
            "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
          }
        },
        "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
        "additionalProperties": true
      }
    },
    "commit": {
      "type": "boolean"
    },
    "mergeMode": {
      "enum": [
        "fill_missing",
        "add_only"
      ],
      "type": "string",
      "description": "What to do with a word that is already in the collection: \"fill_missing\" (default) fills its empty fields, \"add_only\" leaves it as it is."
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string"
    },
    "collectionTitle": {
      "type": "string"
    },
    "allowIncompleteCards": {
      "type": "boolean",
      "description": "Default false. True marks the cards as a sparse import that the user asked for; it lets them through without the complete-card fields (everything except image, the dictionary article on a German/Romance noun title, {} highlights in examples)."
    }
  }
}
lingard_add_words_to_collection output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "summary",
    "changes",
    "payload"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "changes": {
      "type": "object",
      "additionalProperties": true
    },
    "payload": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "vocabCollections": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "warnings": {
          "type": "integer"
        },
        "cardsCreated": {
          "type": "integer"
        },
        "cardsSkipped": {
          "type": "integer"
        },
        "cardsUpdated": {
          "type": "integer"
        },
        "collectionsCreated": {
          "type": "integer"
        },
        "collectionsTouched": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "mergeMode": {
      "type": "string"
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "styleSource": {
          "type": "string"
        },
        "inferredStyle": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_add_words_to_collection annotations
{
  "title": "Add Lingard words to collection",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
lingard_fill_missing_card_fields — Fill Missing Lingard Card Fields
Advertised by the server during the last successful anonymous check.

Fills empty fields on existing Lingard cards. It never overwrites or clears a field that already has a value. Works on the user's own collections and on the "Words not in a collection" bucket; curated Lingard collections are read-only because their content comes from the Lingard catalog. commit=true writes.

lingard_fill_missing_card_fields input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "cards"
  ],
  "properties": {
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ipa": {
            "type": "string",
            "description": "Alias for pron; IPA transcription."
          },
          "pos": {
            "type": "string",
            "description": "Part of speech, for example noun, verb, adjective, adverb, phrase."
          },
          "form": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Current inflected-form category, not part of speech. English values: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. A base/unmarked form, singular noun, phrase, or word with no category has no form (field omitted or null)."
          },
          "pron": {
            "type": "string",
            "description": "Pronunciation or IPA transcription (for English: IPA or a clear phonetic transcription)."
          },
          "syns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Synonyms or close alternatives in the target language; a complete card has at least one."
          },
          "word": {
            "type": "string",
            "description": "Alias for title; a German/Romance noun carries its article here too."
          },
          "title": {
            "type": "string",
            "description": "Word or phrase in the target language. A noun in a language with grammatical gender carries its dictionary article when one is used, e.g. German der Hund / die Reise / das Haus, Spanish el aeropuerto / la ciudad, French le livre / la maison."
          },
          "examples": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "c": {
                      "type": "string"
                    },
                    "e": {
                      "type": "boolean"
                    },
                    "t": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Translation line. Empty string or null stores the example without a translation."
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "example": {
                      "type": "string"
                    },
                    "collocate": {
                      "type": "string"
                    },
                    "translate": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "translation": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                }
              ]
            },
            "description": "Example sentences or collocations with translations, as objects with c/collocate/example and t/translate/translation. The target word in the example and the translated word in the translation are wrapped in {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required; t:\"\" (or null) stores the example with an empty translation line, for examples the user wants untranslated."
          },
          "synonyms": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Alias for syns."
          },
          "translate": {
            "type": "string",
            "description": "Translation into the user native language."
          },
          "translation": {
            "type": "string",
            "description": "Alias for translate."
          },
          "allowMissingArticle": {
            "type": "boolean",
            "description": "True for proper nouns, fixed terms, or exceptional nouns that are used without a dictionary article."
          }
        },
        "description": "Lingard vocabulary card. A complete card has title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations; image is optional. German, Spanish, French, Italian, and Portuguese noun titles carry their dictionary article when one is used, e.g. German: der Hund, die Reise, das Haus; pron/ipa never includes the article. In every example the target word is wrapped in {}, and in the example translation the translated word is wrapped in {}. form holds the current inflected-form category and is empty for base forms.",
        "additionalProperties": true
      }
    },
    "commit": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string"
    },
    "collectionTitle": {
      "type": "string"
    }
  }
}
lingard_fill_missing_card_fields output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collection",
    "summary",
    "changes",
    "payload"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "changes": {
      "type": "object",
      "additionalProperties": true
    },
    "payload": {
      "type": "object",
      "properties": {
        "cards": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "vocabCollections": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "warnings": {
          "type": "integer"
        },
        "cardsCreated": {
          "type": "integer"
        },
        "cardsSkipped": {
          "type": "integer"
        },
        "cardsUpdated": {
          "type": "integer"
        },
        "collectionsCreated": {
          "type": "integer"
        },
        "collectionsTouched": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "mergeMode": {
      "type": "string"
    },
    "collection": {
      "type": "object",
      "properties": {
        "pic": {
          "type": "string"
        },
        "uuid": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "styleSource": {
          "type": "string"
        },
        "inferredStyle": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_fill_missing_card_fields annotations
{
  "title": "Fill missing Lingard card fields",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
lingard_update_example_translations — Update Lingard Example Translations
Advertised by the server during the last successful anonymous check.
Advertised destructive

Rewrites only the translation line of examples that already exist on Lingard cards; the example sentence, its {} highlights and its audio/typing markers are left exactly as they are. It changes, adds, or removes example translations; an empty translation is a supported card state, not an error. `translations` holds one entry per existing example, in order, so it is built from the card's current examples (a collection read with includeExamples:true lists them). commit=true writes; without it the call returns the resulting examples as a preview.

lingard_update_example_translations input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "cards"
  ],
  "properties": {
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Card selector (alternative to `cardId`): the word on the card."
          },
          "cardId": {
            "type": "string",
            "description": "Card selector (preferred): the card's cardId, as listed with the collection's cards."
          },
          "translations": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                },
                {
                  "type": "object",
                  "properties": {
                    "t": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "index": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              ]
            },
            "description": "Positional: entry N replaces the translation line of example N, and a shorter list leaves the remaining examples untouched. Use \"\" or null to leave an example untranslated (this is allowed and is how a user clears a translation), or {\"index\":2,\"t\":\"…\"} to patch a single example. The example text itself is never read from here."
          },
          "collectionUuid": {
            "type": "string"
          },
          "collectionTitle": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "description": "One entry per card to edit. Each entry needs a card selector (`cardId`, or `title` plus a collection when the word occurs in several) and `translations`."
    },
    "commit": {
      "type": "boolean",
      "description": "True writes. Default false returns the resulting examples without saving."
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string",
      "description": "Optional default collection for cards addressed by title."
    },
    "collectionTitle": {
      "type": "string",
      "description": "Optional default collection title for cards addressed by title."
    }
  }
}
lingard_update_example_translations output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "committed",
    "summary",
    "cards"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "action": {
            "enum": [
              "updated",
              "would_update",
              "unchanged"
            ],
            "type": "string"
          },
          "cardId": {
            "type": "string"
          },
          "examples": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "c": {
                  "type": "string",
                  "description": "Example sentence in the target language, with the target word wrapped in {}."
                },
                "e": {
                  "type": "boolean",
                  "description": "Whether the example is enabled on the card."
                },
                "t": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Translation line, or null when the example is deliberately left untranslated."
                }
              },
              "additionalProperties": true
            },
            "description": "The card examples as they stand after the update, example text unchanged."
          },
          "exampleCount": {
            "type": "integer"
          },
          "collectionUuid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "updatedExamples": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Indexes of the examples whose translation line changed."
          }
        },
        "additionalProperties": true
      }
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "action": {
            "type": "string"
          },
          "cardId": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      }
    },
    "summary": {
      "type": "object",
      "properties": {
        "skipped": {
          "type": "integer"
        },
        "updated": {
          "type": "integer"
        },
        "unchanged": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
lingard_update_example_translations annotations
{
  "title": "Update Lingard example translations",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
lingard_attach_card_images — Attach Lingard Card Images
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Attaches supplied images to existing Lingard cards. It does not generate images: each entry carries the image itself as imageBase64 or dataUri, or an imageUrl that the server downloads. PNG, JPEG, WebP, and SVG inputs are converted to WebP and uploaded as private custom card images; an image the card already has is replaced. commit=true writes.

lingard_attach_card_images input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "images"
  ],
  "properties": {
    "commit": {
      "type": "boolean",
      "description": "True uploads and attaches. Default false returns a dry-run preview without writing."
    },
    "images": {
      "type": "array",
      "items": {
        "type": "object",
        "allOf": [
          {
            "anyOf": [
              {
                "required": [
                  "cardId"
                ]
              },
              {
                "required": [
                  "title"
                ]
              },
              {
                "required": [
                  "word"
                ]
              }
            ]
          },
          {
            "anyOf": [
              {
                "required": [
                  "imageBase64"
                ]
              },
              {
                "required": [
                  "dataUri"
                ]
              },
              {
                "required": [
                  "imageUrl"
                ]
              }
            ]
          }
        ],
        "properties": {
          "word": {
            "type": "string",
            "description": "Optional alias of `title`."
          },
          "title": {
            "type": "string",
            "description": "Card selector (alternative to `cardId`): the card's word/title. One of `cardId` or `title` is required."
          },
          "cardId": {
            "type": "string",
            "description": "Card selector (preferred): UUID of the card to attach the image to. One of `cardId` or `title` is required."
          },
          "prompt": {
            "type": "string",
            "description": "Not supported: this tool cannot create an image from a prompt; it needs `imageBase64`, `dataUri`, or `imageUrl`."
          },
          "dataUri": {
            "type": "string",
            "description": "Image source (an entry carries EXACTLY ONE of `imageBase64`, `dataUri`, or `imageUrl`). Data URI, e.g. data:image/webp;base64,... or data:image/svg+xml;utf8,<svg...>."
          },
          "imageUrl": {
            "type": "string",
            "description": "Image source (an entry carries EXACTLY ONE of `imageBase64`, `dataUri`, or `imageUrl`). HTTP(S) URL to fetch and convert."
          },
          "mimeType": {
            "type": "string",
            "description": "Optional MIME-type hint for `imageBase64`, e.g. image/png; the server also sniffs the decoded header."
          },
          "imageBase64": {
            "type": "string",
            "description": "Image source (an entry carries EXACTLY ONE of `imageBase64`, `dataUri`, or `imageUrl`). Base64 image bytes (PNG, JPEG, WebP, or SVG; converted to WebP)."
          },
          "collectionUuid": {
            "type": "string",
            "description": "Optional: limit the card lookup to this collection UUID (disambiguates a `title`)."
          },
          "collectionTitle": {
            "type": "string",
            "description": "Optional: limit the card lookup to this collection by title."
          }
        },
        "description": "One image to attach to one card: a card selector (`cardId` or `title`) and exactly one image source (`imageBase64`, `dataUri`, or `imageUrl`). Every other field is optional.",
        "additionalProperties": true
      },
      "description": "One entry per card to illustrate. Each entry needs a card selector (`cardId` or `title`) and exactly one image source (`imageBase64`, `dataUri`, or `imageUrl`)."
    },
    "targetLang": {
      "type": "string"
    },
    "collectionUuid": {
      "type": "string"
    },
    "collectionTitle": {
      "type": "string"
    }
  }
}
lingard_attach_card_images output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "committed",
    "summary",
    "images",
    "skipped"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "images": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "action": {
            "type": "string"
          },
          "cardId": {
            "type": "string"
          },
          "imageId": {
            "type": "string"
          },
          "inputBytes": {
            "type": "integer"
          },
          "outputBytes": {
            "type": "integer"
          },
          "storagePath": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      }
    },
    "summary": {
      "type": "object",
      "properties": {
        "skipped": {
          "type": "integer"
        },
        "attached": {
          "type": "integer"
        },
        "replaced": {
          "type": "integer"
        }
      },
      "additionalProperties": true
    },
    "committed": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    },
    "upsertResult": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}
lingard_attach_card_images annotations
{
  "title": "Attach Lingard card images",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
lingard_get_learning_pauses — Get Lingard Learning Pauses
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists, for one language, the user's collections and sources (books, the news) and which of them are on pause. A collection or source on pause gives the automatic «Now learning» sessions no words — no new words and no reviews — and is not counted in the day's goals or reminders; opening it in the app still studies it as usual. Each entry carries the exact uuid, bookKey, and title that pause changes take.

lingard_get_learning_pauses input schema
{
  "type": "object",
  "required": [
    "targetLang"
  ],
  "properties": {
    "targetLang": {
      "type": "string",
      "description": "The learned language, e.g. en, de, es, fr."
    }
  }
}
lingard_get_learning_pauses output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "collections",
    "sources",
    "pausedCount"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "note": {
      "type": "string"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "paused": {
            "type": "boolean"
          },
          "bookKey": {
            "type": "string"
          },
          "cardCount": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    },
    "collections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "paused": {
            "type": "boolean"
          },
          "source": {
            "enum": [
              "user",
              "catalog"
            ],
            "type": "string"
          },
          "pauseKey": {
            "type": "string"
          },
          "cardCount": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      }
    },
    "pausedCount": {
      "type": "integer"
    }
  },
  "additionalProperties": true
}
lingard_get_learning_pauses annotations
{
  "title": "Get Lingard learning pauses",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
lingard_set_learning_pauses — Set Lingard Learning Pauses
Advertised by the server during the last successful anonymous check.

Puts collections and sources on pause or takes them off it, for one language — e.g. "study only my Travel collection this week", "pause the news words", "resume everything". action: "pause" or "resume" the listed ones; "only" — resume the listed ones and pause every other collection and source of the language; "resume_all" — take every pause off (lists ignored). Collections are named by uuid or exact title and sources by bookKey or exact title, as the learning-pause list reports them. A paused item gives the automatic «Now learning» sessions no words and is not counted in goals or reminders; opening it in the app still studies it. commit=true writes; without it the call returns a preview of the changes and the resulting state.

lingard_set_learning_pauses input schema
{
  "type": "object",
  "required": [
    "targetLang",
    "action"
  ],
  "properties": {
    "action": {
      "enum": [
        "pause",
        "resume",
        "only",
        "resume_all"
      ],
      "type": "string"
    },
    "commit": {
      "type": "boolean",
      "description": "True writes. Default false returns a preview without writing."
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Sources by bookKey (catalog:… / imported:…) or exact title."
    },
    "targetLang": {
      "type": "string",
      "description": "The learned language, e.g. en, de, es, fr."
    },
    "collections": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Collections by uuid or exact title."
    }
  }
}
lingard_set_learning_pauses output schema
{
  "type": "object",
  "required": [
    "ok",
    "targetLang",
    "action",
    "committed",
    "changes",
    "collections",
    "sources",
    "pausedCount"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "note": {
      "type": "string"
    },
    "action": {
      "type": "string"
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "collection",
              "source"
            ],
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "paused": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      }
    },
    "preview": {
      "type": "boolean"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "paused": {
            "type": "boolean"
          },
          "bookKey": {
            "type": "string"
          },
          "cardCount": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      }
    },
    "committed": {
      "type": "boolean"
    },
    "targetLang": {
      "type": "string"
    },
    "collections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "paused": {
            "type": "boolean"
          },
          "source": {
            "enum": [
              "user",
              "catalog"
            ],
            "type": "string"
          },
          "pauseKey": {
            "type": "string"
          },
          "cardCount": {
            "type": "integer"
          }
        },
        "additionalProperties": true
      }
    },
    "pausedCount": {
      "type": "integer"
    }
  },
  "additionalProperties": true
}
lingard_set_learning_pauses annotations
{
  "title": "Set Lingard learning pauses",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

7 advertised

Lingard English learning context — Lingard English learning context

Advertised by the server during the last successful anonymous check.

Live Lingard English profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard English learning context URI
lingard://learning-context/en

MIME type: application/json

Lingard English learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard German learning context — Lingard German learning context

Advertised by the server during the last successful anonymous check.

Live Lingard German profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard German learning context URI
lingard://learning-context/de

MIME type: application/json

Lingard German learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard Spanish learning context — Lingard Spanish learning context

Advertised by the server during the last successful anonymous check.

Live Lingard Spanish profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard Spanish learning context URI
lingard://learning-context/es

MIME type: application/json

Lingard Spanish learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard French learning context — Lingard French learning context

Advertised by the server during the last successful anonymous check.

Live Lingard French profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard French learning context URI
lingard://learning-context/fr

MIME type: application/json

Lingard French learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard Italian learning context — Lingard Italian learning context

Advertised by the server during the last successful anonymous check.

Live Lingard Italian profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard Italian learning context URI
lingard://learning-context/it

MIME type: application/json

Lingard Italian learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard Polish learning context — Lingard Polish learning context

Advertised by the server during the last successful anonymous check.

Live Lingard Polish profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard Polish learning context URI
lingard://learning-context/pl

MIME type: application/json

Lingard Polish learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard Portuguese learning context — Lingard Portuguese learning context

Advertised by the server during the last successful anonymous check.

Live Lingard Portuguese profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.

Lingard Portuguese learning context URI
lingard://learning-context/pt

MIME type: application/json

Lingard Portuguese learning context annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}
Lingard learning context by target language — Lingard learning context by target language

Advertised by the server during the last successful anonymous check.

Live Lingard target-language profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data. targetLang is a language code such as en, de, es, fr, it, pl, or pt.

Lingard learning context by target language URI template
lingard://learning-context/{targetLang}

MIME type: application/json

Lingard learning context by target language annotations
{
  "audience": [
    "assistant",
    "user"
  ],
  "priority": 1
}

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
834 ms
95th percentile latency
834 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 834 ms · metadata changed · 15 tool(s), 7 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http lingard-vocab-mcp https://lingard.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add lingard-vocab-mcp --url https://lingard.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable lingard-vocab-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "lingard-vocab-mcp": {
      "url": "https://lingard.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "lingard-vocab-mcp": {
      "type": "streamableHttp",
      "url": "https://lingard.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start lingard-vocab-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "lingard-vocab-mcp": {
      "type": "http",
      "url": "https://lingard.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http lingard-vocab-mcp https://lingard.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "lingard-vocab-mcp": {
      "url": "https://lingard.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "lingard-vocab-mcp": {
      "serverUrl": "https://lingard.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Lingard Vocab MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Lingard Vocab MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing