Build and enrich your Lingard vocabulary: topic collections, flashcards, translations, examples.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this after search, or when the user gives a Lingard resource URI such as lingard://learning-context/en. Fetches the full live Lingard JSON record from Firestore.
Preferred selector: a search-result id returned by a prior `search` call, e.g. "learning-context:en". Provide `id` OR `uri` (not both); if both are given, `id` wins.
Alternative selector, used only when `id` is omitted: a Lingard resource URI, e.g. "lingard://learning-context/en".
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.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http vocab https://lingard.app/mcp
Use this after search, or when the user gives a Lingard resource URI such as lingard://learning-context/en. Fetches the full live Lingard JSON record from Firestore.
| Argument | Type | Description |
|---|---|---|
| id | string | Preferred selector: a search-result id returned by a prior `search` call, e.g. "learning-context:en". Provide `id` OR `uri` (not both); if both are given, `id` wins. |
| uri | string | Alternative selector, used only when `id` is omitted: a Lingard resource URI, e.g. "lingard://learning-context/en". |
| targetLang | string | 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. |
{
"type": "object",
"anyOf": [
{
"required": [
"id"
]
},
{
"required": [
"uri"
]
},
{
"required": [
"targetLang"
]
}
],
"properties": {
"id": {
"type": "string",
"description": "Preferred selector: a search-result id returned by a prior `search` call, e.g. \"learning-context:en\". Provide `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": "Identify the record with exactly one of `id` or `uri`. If both are sent, `id` is used. If neither is sent, you must pass `targetLang`, which fetches that language's learning context."
}Adds cards to an existing Lingard collection, deduplicating by normalized word title. Pass commit=true to write. Only collections with writable="full" accept new cards: curated Lingard collections are read-only and the unfiled bucket takes no new cards — create a collection with lingard_create_vocab_collection instead. By default every AI-generated card must include all applicable useful fields except image: title, translate, pos, pron/ipa, syns, and examples with translations. For German/Romance nouns, include the dictionary article in title/word when needed, e.g. der Hund, die Reise, das Haus. Example text and example translation must highlight the target word/translated word with {}. form is not part of speech; use it only for the current inflected-form category, otherwise omit/null it. Do not add word+translation-only cards unless the user explicitly requests sparse cards and allowIncompleteCards=true. 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 — use lingard_commit_vocab_changes for that.
| Argument | Type | Description |
|---|---|---|
| cards* | array | |
| commit | boolean | |
| mergeMode | string | 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* | string | |
| collectionUuid | string | |
Attaches generated or supplied images to existing Lingard cards. This tool does not generate images from prompt alone: pass actual imageBase64, dataUri, or imageUrl. 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. An imageUrl is downloaded from that address. Pass commit=true to write.
| Argument | Type | Description |
|---|---|---|
| commit | boolean | Set true to actually upload and attach. Default false returns a dry-run preview without writing. |
| images* | array | 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* | string | |
| collectionUuid | string | |
| collectionTitle | string |
{
"type": "object",
"required": [
"targetLang",
"images"
],
"properties": {
"commit": {
"type": "boolean",
"description": "Set true to actually upload and attach. 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. Provide `cardId` OR `title`."
},
"cardId": {
"type": "string",
"description": "Card selector (preferred): UUID of the card to attach the image to. Provide `cardId` OR `title`."
},
"prompt": {
"type": "string",
"description": "Not supported as a generator: this tool cannot create an image from a prompt. Generate the image first, then pass `imageBase64`, `dataUri`, or `imageUrl`."
},
"dataUri": {
"type": "string",
"description": "Image source — provide 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 — provide 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 — provide 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. Provide a card selector (`cardId` or `title`) and exactly one image source (`imageBase64`, `dataUri`, or `imageUrl`). Every other field is optional; do not send more than one image source.",
"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"
}
}
}Commits a previously previewed or freshly supplied Lingard vocabulary change. For AI-generated new cards, include all applicable useful fields except image by default: title, translate, pos, pron/ipa, syns, and examples with translations. For German/Romance nouns, include the dictionary article in title/word when needed, e.g. der Hund, die Reise, das Haus. Example text and example translation must highlight the target word/translated word with {}. form is not part of speech; use it only for the current inflected-form category, otherwise omit/null it. Do not write word+translation-only cards unless allowIncompleteCards=true was explicitly requested by the user. 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, so the user is asked to approve it. To only add new cards or fill empty fields, use lingard_add_words_to_collection or lingard_fill_missing_card_fields.
| Argument | Type | Description |
|---|---|---|
| change* | object | |
| targetLang* | string |
{
"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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Use [\"form\"] to clear an existing incorrect grammatical form when the current word is base/unmarked and form should be null/empty. Currently only form is supported."
},
"translation": {
"type": "string",
"description": "Alias for translate."
},
"allowMissingArticle": {
"type": "boolean",
"description": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Use [\"form\"] to clear an existing incorrect grammatical form when the current word is base/unmarked and form should be null/empty. Currently only form is supported."
},
"translation": {
"type": "string",
"description": "Alias for translate."
},
"allowMissingArticle": {
"type": "boolean",
"description": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. Set true only when the user explicitly wants sparse cards or exact import behavior. Otherwise AI-generated cards must include title, translate, pos, pron/ipa, syns, and examples with translations. German/Romance noun titles must include dictionary articles when needed. Example text and example translation must highlight the target word/translated word with {}. form is required only when the current word is an inflected form."
}
},
"additionalProperties": true
},
"targetLang": {
"type": "string"
}
}
}Creates a Lingard vocabulary collection, optionally with initial cards. Pass commit=true to write. By default every AI-generated card must include all applicable useful fields except image: title, translate, pos, pron/ipa, syns, and examples with translations. For German/Romance nouns, include the dictionary article in title/word when needed, e.g. der Hund, die Reise, das Haus. Example text and example translation must highlight the target word/translated word with {}. form is not part of speech; use it only for the current inflected-form category, otherwise omit/null it. Do not create word+translation-only cards unless the user explicitly requests sparse cards and allowIncompleteCards=true.
| Argument | Type | Description |
|---|---|---|
| pic | string | |
| icon | string | |
| cards | array | |
| color | string | |
| topic | string | |
| commit | boolean | |
| targetLang* | string | |
| collectionTitle* | string | |
| allowIncompleteCards |
Fills empty fields on existing Lingard cards. It never overwrites or clears a field that already has a value; to correct one — e.g. clear an incorrect grammatical form with clearFields:["form"] — use lingard_commit_vocab_changes. 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. Pass commit=true to write.
| Argument | Type | Description |
|---|---|---|
| cards* | array | |
| commit | boolean | |
| targetLang* | string | |
| collectionUuid | string | |
| collectionTitle | string |
{
"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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it for base forms.",
"additionalProperties": true
}
},
"commit": {
"type": "boolean"
},
"targetLang": {
"type": "string"
},
"collectionUuid": {
"type": "string"
},
"collectionTitle": {
"type": "string"
}
}
}Returns live Lingard cards in a collection that are missing requested fields such as translation, POS, pronunciation, examples, or image. Use before filling missing fields. A curated Lingard collection always reports zero gaps: its words come from the Lingard catalog and are not the user's to fill.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| fields | array | Optional. Always an ARRAY of field-name strings (never a bare string): e.g. ["translation"] for one field or ["translation","image"] for several. Returns cards missing ANY listed field. Omit to check all fields. |
| targetLang* | string | |
| collectionUuid | string | Collection selector: its UUID. Provide `collectionUuid` OR `collectionTitle` (UUID wins if both are given). |
| collectionTitle | string | Collection selector (alternative to `collectionUuid`): the collection title. |
{
"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. Always an ARRAY of field-name strings (never a bare string): e.g. [\"translation\"] for one field or [\"translation\",\"image\"] for several. Returns cards missing ANY listed field. Omit to check all fields."
},
"targetLang": {
"type": "string"
},
"collectionUuid": {
"type": "string",
"description": "Collection selector: its UUID. Provide `collectionUuid` OR `collectionTitle` (UUID wins if both are given)."
},
"collectionTitle": {
"type": "string",
"description": "Collection selector (alternative to `collectionUuid`): the collection title."
}
}
}Call this first whenever the user asks for their current Lingard learning context, English profile, vocabulary totals, saved collections, collection titles, card counts, or missing-field stats. Reads live Lingard Firestore data; do not answer from memory or generic Lingard history. 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). Never tell the user a collection is missing or that the account looks wrong just because they only recognise some of the titles.
| Argument | Type | Description |
|---|---|---|
| targetLang* | string |
{
"type": "object",
"required": [
"targetLang"
],
"properties": {
"targetLang": {
"type": "string"
}
}
}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. Use this when the user asks what is paused or which collections they are studying, and before lingard_set_learning_pauses to get exact uuids, bookKeys and titles.
| Argument | Type | Description |
|---|---|---|
| targetLang* | string | The learned language, e.g. en, de, es, fr. |
{
"type": "object",
"required": [
"targetLang"
],
"properties": {
"targetLang": {
"type": "string",
"description": "The learned language, e.g. en, de, es, fr."
}
}
}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. Use this when the user asks what words/cards are in a specific Lingard collection. Pass includeExamples:true to also read each card's example sentences and their translations — required before editing them.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Optional max number of cards to return (1–1000). |
| targetLang* | string | |
| collectionUuid | string | Collection selector (preferred): its UUID. Provide `collectionUuid` OR `collectionTitle`. |
| collectionTitle | string | Collection selector (alternative to `collectionUuid`): the collection title. |
| includeExamples | boolean | Default false. Set true to return the full example rows (`examples`: example text, translation line, enabled flag) for every card instead of just the `exampleCount`. Use it whenever the user wants to see or edit examples. |
{
"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. Provide `collectionUuid` OR `collectionTitle`."
},
"collectionTitle": {
"type": "string",
"description": "Collection selector (alternative to `collectionUuid`): the collection title."
},
"includeExamples": {
"type": "boolean",
"description": "Default false. Set true to return the full example rows (`examples`: example text, translation line, enabled flag) for every card instead of just the `exampleCount`. Use it whenever the user wants to see or edit examples."
}
},
"description": "Identify the collection with `collectionUuid` or `collectionTitle` (provide one; UUID wins if both are given)."
}Returns live Lingard profile level, topic, collection context, and existing words so the calling AI can suggest level-appropriate new cards without duplicates.
| Argument | Type | Description |
|---|---|---|
| count | integer | |
| level | string | |
| topic | string | |
| targetLang* | string | |
| excludeLimit | integer | |
| collectionUuid | string | |
| collectionTitle | string |
{
"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"
}
}
}Previews a Lingard vocabulary collection/card change without writing to Firestore. For AI-generated new cards, include all applicable useful fields except image by default: title, translate, pos, pron/ipa, syns, and examples with translations. For German/Romance nouns, include the dictionary article in title/word when needed, e.g. der Hund, die Reise, das Haus. Example text and example translation must highlight the target word/translated word with {}. form is not part of speech; use it only for the current inflected-form category, otherwise omit/null it.
| Argument | Type | Description |
|---|---|---|
| change* | object | |
| targetLang* | string |
{
"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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Use [\"form\"] to clear an existing incorrect grammatical form when the current word is base/unmarked and form should be null/empty. Currently only form is supported."
},
"translation": {
"type": "string",
"description": "Alias for translate."
},
"allowMissingArticle": {
"type": "boolean",
"description": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Use [\"form\"] to clear an existing incorrect grammatical form when the current word is base/unmarked and form should be null/empty. Currently only form is supported."
},
"translation": {
"type": "string",
"description": "Alias for translate."
},
"allowMissingArticle": {
"type": "boolean",
"description": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. Set true only when the user explicitly wants sparse cards or exact import behavior. Otherwise AI-generated cards must include title, translate, pos, pron/ipa, syns, and examples with translations. German/Romance noun titles must include dictionary articles when needed. Example text and example translation must highlight the target word/translated word with {}. form is required only when the current word is an inflected form."
}
},
"additionalProperties": true
},
"targetLang": {
"type": "string"
}
}
}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). Name collections by uuid or exact title and sources by bookKey or exact title, as lingard_get_learning_pauses returns 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. Pass commit=true to write; without it the call returns a preview of the changes and the resulting state.
| Argument | Type | Description |
|---|---|---|
| action* | string | |
| commit | boolean | Set true to write. Default false returns a preview without writing. |
| sources | array | Sources by bookKey (catalog:… / imported:…) or exact title. |
| targetLang* | string | The learned language, e.g. en, de, es, fr. |
| collections | array | Collections by uuid or exact title. |
{
"type": "object",
"required": [
"targetLang",
"action"
],
"properties": {
"action": {
"enum": [
"pause",
"resume",
"only",
"resume_all"
],
"type": "string"
},
"commit": {
"type": "boolean",
"description": "Set true to write. 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."
}
}
}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. Use this when the user wants to change, add, or remove example translations — including leaving them empty, which is a supported card state, not an error. Read the current examples first with lingard_get_vocab_collection includeExamples:true, then send one `translations` entry per example, in order. Pass commit=true to write; without it the call returns the resulting examples as a preview.
| Argument | Type | Description |
|---|---|---|
| cards* | array | 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 | boolean | Set true to write. Default false returns the resulting examples without saving. |
| targetLang* | string | |
| collectionUuid | string | Optional default collection for cards addressed by title. |
| collectionTitle | string | Optional default collection title for cards addressed by title. |
{
"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 cardId returned by lingard_get_vocab_collection."
},
"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": "Set true to write. 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."
}
}
}Use this when the user asks about their Lingard vocabulary, learning context, English profile, totals, collection titles, saved words, flashcards, or missing vocabulary fields. Returns live Lingard Firestore results; do not use generic memory or personal context instead.
| Argument | Type | Description |
|---|---|---|
| q | string | Alias for query. |
| query | string | Search query, for example "English learning context" or "saved vocabulary collections". |
| targetLang | string | 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",
"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."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
| collectionTitle |
| string |
| allowIncompleteCards | boolean | Default false. Use true only when the user explicitly asks for sparse cards; otherwise include all fields except image, include dictionary articles for German/Romance nouns when needed, and highlight example words/translations with {}. |
{
"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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. Use true only when the user explicitly asks for sparse cards; otherwise include all fields except image, include dictionary articles for German/Romance nouns when needed, and highlight example words/translations with {}."
}
}
}| boolean |
| Default false. Use true only when the user explicitly asks for sparse cards; otherwise include all fields except image, include dictionary articles for German/Romance nouns when needed, and highlight example words/translations with {}. |
{
"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. For English use only: past, present participle, past participle, 3rd sg. present, plural, comparative, superlative. If the word is a base/unmarked form, singular noun, phrase, or no category applies, omit this field or set null."
},
"pron": {
"type": "string",
"description": "Pronunciation or IPA transcription. For English, prefer IPA or a clear phonetic transcription."
},
"syns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Useful synonyms or close alternatives in the target language. Include at least one when possible."
},
"word": {
"type": "string",
"description": "Alias for title. Include the article for German/Romance nouns when needed."
},
"title": {
"type": "string",
"description": "Word or phrase in the target language. For nouns in languages that require articles for gender, include the dictionary article when needed, 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. Prefer objects with c/collocate/example and t/translate/translation. Wrap the target word in the example with {} and the translated word in the translation with {}, for example c:\"I missed my {flight}.\", t:\"Я опоздал на свой {рейс}.\". A translation is required unless the user asked for untranslated examples: pass t:\"\" (or null) to store the example with an empty translation line."
},
"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": "Set true only for proper nouns, fixed terms, or exceptional nouns where a dictionary article is genuinely not used."
}
},
"description": "Lingard vocabulary card. For AI-generated new cards, include every useful field except image: title/word, translate/translation, pos, pron or ipa, syns/synonyms, and examples with translations. For German, Spanish, French, Italian, and Portuguese nouns, include the appropriate dictionary article in title/word when needed, e.g. German: der Hund, die Reise, das Haus. Do not include articles in pron/ipa. In every example, wrap the target word in {} and wrap the translated word in {} in the example translation. Use form only for the current inflected form category; omit/null it 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. Use true only when the user explicitly asks for sparse cards; otherwise include all fields except image, include dictionary articles for German/Romance nouns when needed, and highlight example words/translations with {}."
}
}
}