Skip to content

Lingard Vocab

app.lingard/vocablingard.appstreamable-httpv0.5.8Scanned

Build and enrich your Lingard vocabulary: topic collections, flashcards, translations, examples.

15 tools: 3 can delete or cancel things, 5 change things and 7 only read.

Tools: 3 delete, 0 irreversible, 5 write, 7 read.
  • Reads private data · 0
  • Reads text others write · 2
  • Can send data out · 1
  • 2 findings, 1 high

Anlyon alternative

8 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

15 tools

Deletes or cancels 3Claude Code: deny
  • lingard_attach_card_imagesAttaches generated or supplied images to existing Lingard cards.Reads text others writeNo findings

    Why it is in this group

    • The name "lingard_attach_card_images" says "attach": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Attach Lingard card images
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • lingard_commit_vocab_changesCommits a previously previewed or freshly supplied Lingard vocabulary change.No findings

    Why it is in this group

    • The name "lingard_commit_vocab_changes" says "commit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Commit Lingard vocabulary changes
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • lingard_update_example_translationsRewrites 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 ar…No findings

    Why it is in this group

    • The name "lingard_update_example_translations" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Update Lingard example translations
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
Changes things 5Claude Code: ask
  • lingard_add_words_to_collectionAdds cards to an existing Lingard collection, deduplicating by normalized word title.No findings

    Why it is in this group

    • The name "lingard_add_words_to_collection" says "add": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Add Lingard words to collection
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • lingard_create_vocab_collectionCreates a Lingard vocabulary collection, optionally with initial cards.No findings

    Why it is in this group

    • The name "lingard_create_vocab_collection" says "create": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Create Lingard vocabulary collection
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • lingard_fill_missing_card_fieldsFills empty fields on existing Lingard cards.No findings

    Why it is in this group

    • The name "lingard_fill_missing_card_fields" says "fill": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Fill missing Lingard card fields
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • lingard_get_learning_contextCall this first whenever the user asks for their current Lingard learning context, English profile, vocabulary totals, saved collections, collection titles, card counts, or missing…2 findings

    Why it is in this group

    • The name "lingard_get_learning_context" says "get": a word for reading.
    • The description's first verb is "call": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description contains "Never tell the user", an instruction to keep something from the user.

      Matched text

      description: "...eading, which belong to no collection). Never tell the user a collection is missing or that the acc..."

      What this check looks for
    • Warn

      The server marks "lingard_get_learning_context" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "lingard_get_learning_context" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Lingard learning context
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_set_learning_pausesPuts collections and sources on pause or takes them off it, for one language — e.g.No findings

    Why it is in this group

    • The name "lingard_set_learning_pauses" says "set": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set Lingard learning pauses
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 7Show 7 read-only tools
  • fetchUse this after search, or when the user gives a Lingard resource URI such as lingard://learning-context/en.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "fetch" says "fetch": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "uri": it reads web pages, which anyone can write.
    • untrusted-inputThe input takes a URL (input.uri), and the tool reads it: it reads web pages, which anyone can write.
    • outboundThe input takes a URL (input.uri): a request to a URL can carry data to whoever runs it.

    Claude Code: ask, because it is tagged outbound.

    Description, as the server wrote 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.

    Annotations the server declares

    • title: Fetch Lingard Vocab record
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_get_collection_gapsReturns live Lingard cards in a collection that are missing requested fields such as translation, POS, pronunciation, examples, or image.No findings

    Why it is in this group

    • The name "lingard_get_collection_gaps" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Lingard collection gaps
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_get_learning_pausesLists, for one language, the user's collections and sources (books, the news) and which of them are on pause.No findings

    Why it is in this group

    • The name "lingard_get_learning_pauses" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Lingard learning pauses
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_get_vocab_collectionReturns 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 re…No findings

    Why it is in this group

    • The name "lingard_get_vocab_collection" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Lingard vocabulary collection
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_get_word_suggestion_contextReturns live Lingard profile level, topic, collection context, and existing words so the calling AI can suggest level-appropriate new cards without duplicates.No findings

    Why it is in this group

    • The name "lingard_get_word_suggestion_context" says "get": a word for reading.
    Description, as the server wrote it
    Returns live Lingard profile level, topic, collection context, and existing words so the calling AI can suggest level-appropriate new cards without duplicates.

    Annotations the server declares

    • title: Get Lingard word suggestion context
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • lingard_preview_vocab_changesPreviews a Lingard vocabulary collection/card change without writing to Firestore.No findings

    Why it is in this group

    • The name "lingard_preview_vocab_changes" says "preview": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Preview Lingard vocabulary changes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write2
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out1
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

1 high1 warn
  • The description contains "Never tell the user", an instruction to keep something from the user.

    Matched text

    description: "...eading, which belong to no collection). Never tell the user a collection is missing or that the acc..."

    What this check looks for
  • The server marks "lingard_get_learning_context" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "lingard_get_learning_context" says "get": a word for reading.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.5.8. Values in angle brackets are yours to fill in.

claude mcp add --transport http vocab https://lingard.app/mcp
claude mcp add --transport http vocab https://lingard.app/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__vocab__search",
      "mcp__vocab__lingard_get_vocab_collection",
      "mcp__vocab__lingard_get_collection_gaps",
      "mcp__vocab__lingard_get_word_suggestion_context",
      "mcp__vocab__lingard_preview_vocab_changes",
      "mcp__vocab__lingard_get_learning_pauses"
    ],
    "ask": [
      "mcp__vocab__fetch",
      "mcp__vocab__lingard_get_learning_context",
      "mcp__vocab__lingard_create_vocab_collection",
      "mcp__vocab__lingard_add_words_to_collection",
      "mcp__vocab__lingard_fill_missing_card_fields",
      "mcp__vocab__lingard_set_learning_pauses"
    ],
    "deny": [
      "mcp__vocab__lingard_commit_vocab_changes",
      "mcp__vocab__lingard_update_example_translations",
      "mcp__vocab__lingard_attach_card_images"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as vocab. Review it before you use it.

Capability tags behind 2 rules
  • mcp__vocab__fetch untrusted-input, outbound
  • mcp__vocab__lingard_attach_card_images untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/app.lingard/vocab/verify?hash=7cf9f26455646cb0261740079e1fa61c8a05f43fbd2cbd65225ce7bd26a2b9b9" | jq -e '.changed == false'

Pinned hash 7cf9f2645564, from Oct 30, 2026, 16:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/app.lingard/vocab/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for app.lingard/vocab
[![anlyon.dev](https://anlyon.dev/badge/app.lingard/vocab.svg)](https://anlyon.dev/servers/app.lingard/vocab)

Source: MCP Registry. Synced Oct 30, 2026, 16:17 UTC.