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.
https://lingard.app/mcpWhat 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
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
{
"tools": {},
"resources": {}
}Tools
15 advertised
search — Search Lingard Vocab
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.
{
"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."
}
}
}{
"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
}{
"title": "Search Lingard Vocab",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}fetch — Fetch Lingard Vocab Record
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.
{
"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."
}{
"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
}{
"title": "Fetch Lingard Vocab record",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_get_learning_context — Get Lingard Learning Context
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.
{
"type": "object",
"required": [
"targetLang"
],
"properties": {
"targetLang": {
"type": "string"
}
}
}{
"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
}{
"title": "Get Lingard learning context",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_get_vocab_collection — Get Lingard Vocabulary Collection
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.
{
"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)."
}{
"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
}{
"title": "Get Lingard vocabulary collection",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_get_collection_gaps — Get Lingard Collection Gaps
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.
{
"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."
}
}
}{
"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
}{
"title": "Get Lingard collection gaps",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_get_word_suggestion_context — Get Lingard Word Suggestion Context
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.
{
"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"
}
}
}{
"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
}{
"title": "Get Lingard word suggestion context",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_preview_vocab_changes — Preview Lingard Vocabulary Changes
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.
{
"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"
}
}
}{
"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
}{
"title": "Preview Lingard vocabulary changes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}lingard_commit_vocab_changes — Commit Lingard Vocabulary Changes
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.
{
"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"
}
}
}{
"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
}{
"title": "Commit Lingard vocabulary changes",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}lingard_create_vocab_collection — Create Lingard Vocabulary Collection
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.
{
"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)."
}
}
}{
"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
}{
"title": "Create Lingard vocabulary collection",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}lingard_add_words_to_collection — Add Lingard Words To Collection
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.
{
"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)."
}
}
}{
"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
}{
"title": "Add Lingard words to collection",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}lingard_fill_missing_card_fields — Fill Missing Lingard Card Fields
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.
{
"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"
}
}
}{
"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
}{
"title": "Fill missing Lingard card fields",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}lingard_update_example_translations — Update Lingard Example Translations
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.
{
"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."
}
}
}{
"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
}{
"title": "Update Lingard example translations",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}lingard_attach_card_images — Attach Lingard Card Images
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.
{
"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"
}
}
}{
"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
}{
"title": "Attach Lingard card images",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}lingard_get_learning_pauses — Get Lingard Learning Pauses
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.
{
"type": "object",
"required": [
"targetLang"
],
"properties": {
"targetLang": {
"type": "string",
"description": "The learned language, e.g. en, de, es, fr."
}
}
}{
"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
}{
"title": "Get Lingard learning pauses",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lingard_set_learning_pauses — Set Lingard Learning Pauses
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.
{
"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."
}
}
}{
"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
}{
"title": "Set Lingard learning pauses",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
7 advertised
Lingard English learning context — Lingard English learning context
Live Lingard English profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/en{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard German learning context — Lingard German learning context
Live Lingard German profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/de{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard Spanish learning context — Lingard Spanish learning context
Live Lingard Spanish profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/es{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard French learning context — Lingard French learning context
Live Lingard French profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/fr{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard Italian learning context — Lingard Italian learning context
Live Lingard Italian profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/it{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard Polish learning context — Lingard Polish learning context
Live Lingard Polish profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/pl{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard Portuguese learning context — Lingard Portuguese learning context
Live Lingard Portuguese profile, vocabulary totals, collection titles, card counts, and missing-field stats from the user's Firestore data.
lingard://learning-context/pt{
"audience": [
"assistant",
"user"
],
"priority": 1
}Lingard learning context by target language — Lingard learning context by target language
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/{targetLang}{
"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.
Claude Code
claude mcp add --transport http lingard-vocab-mcp https://lingard.app/mcpCodex
codex mcp add lingard-vocab-mcp --url https://lingard.app/mcpCursor
{
"mcpServers": {
"lingard-vocab-mcp": {
"url": "https://lingard.app/mcp"
}
}
}Cline
{
"mcpServers": {
"lingard-vocab-mcp": {
"type": "streamableHttp",
"url": "https://lingard.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"lingard-vocab-mcp": {
"type": "http",
"url": "https://lingard.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http lingard-vocab-mcp https://lingard.app/mcpClaude Desktop
{
"mcpServers": {
"lingard-vocab-mcp": {
"url": "https://lingard.app/mcp"
}
}
}Windsurf
{
"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.
Other productivity and knowledge servers
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.