Skip to content

MindDory Brain

by minddory.com · remote · no sign-in to list tools · v1.0.2 · published by com.minddory

Free: turn your AI chats into spaced-repetition vocabulary. 13 tools, reads and writes.

Final · 2Changes · 5

13 tools: 2 do something that can't be undone, 5 change things and 6 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http brain https://api.minddory.com/v1/brain/mcp

Findings

Matches of fixed checks, with the text they matched.

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

    Matched text

    annotations: {"readOnlyHint":true}; The name "get_system_instructions" says "get": a word for reading.

    What this check looks for
  • The server marks "log_interaction" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false}; The name "log_interaction" says "log": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Can't be undone 2Claude Code: ask
  • capture_grammar_mistakeLog a grammar mistake the user just made in the target language, creating a grammar point in their Minddory deck.No findings

    Why it is in this group

    • The name "capture_grammar_mistake" says "capture": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Log a grammar mistake the user just made in the target language, creating a grammar point in their Minddory deck. Use it proactively whenever the user writes a target-language sentence with a clear, correctable error (wrong tense, agreement, word_choice, word_order, missing or wrong article, preposition, gender, conjugation, spelling, pluralization). By connecting Minddory the user opted IN to automatic capture, so log it as you go - do not ask permission first or turn it into a yes/no question. The user connected Minddory to catch and review these patterns; you do not need to announce each log. Pass the original text + correction + error_type. Multiple mistakes in one message = multiple calls. VARIANT RULE: Always pass the user's full BCP-47 variant in the lang field (e.g. en-gb, not en) - get it from get_system_instructions on first turn. Before logging, check that the "error" is not actually a valid regional variant form (US past-simple vs UK present-perfect with "just/already", US "in the hospital" vs UK "in hospital", US "color" vs UK "colour", BR gerund vs PT "a + infinitive", etc.). When the variant is unspecified (base ISO only), treat ALL regional forms as valid. Better to skip a borderline call than to mark a valid variant form as wrong. error_type must be one of: tense, agreement, word_choice, word_order, article, preposition, spelling, pluralization, conjugation, gender, other. Feeds the user's Grammar Patterns view at app.minddory.com/grammar.

    Annotations the server declares

    • title: Capture grammar mistake
    • readOnlyHint: false
    • destructiveHint: false
  • capture_wordCapture a target-language word or phrase to the user's Minddory vocabulary deck (a flashcard in the "Chat Discoveries" folder when the word is new, otherwise a context encounter).No findings

    Why it is in this group

    • The name "capture_word" says "capture": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Capture a target-language word or phrase to the user's Minddory vocabulary deck (a flashcard in the "Chat Discoveries" folder when the word is new, otherwise a context encounter). The user connected Minddory so their assistant builds their deck from real conversations, so use this proactively to log notable target-language vocabulary they encounter, use, or ask about. By connecting Minddory the user opted IN to automatic capture, so just capture as you chat - do not pause to ask permission for each word, and do not turn capturing into a yes/no question. You do not need to announce each capture, but answer honestly if the user asks what you have saved. Use the `words` array to capture several from one message; include a `gloss` (short source-language translation) and `context` (the sentence) when you can. Skip stop words, proper nouns, numbers, and words shorter than 3 characters (CJK / Hangul exempt). ALWAYS pass `lang` — the ISO code of the captured word's own language (you know it from the conversation); the call is rejected without it and the target language is never guessed. `source_lang` (the user's native language) is optional and defaults to their deck. This is the primary tracking signal of Minddory, so capture diligently.

    Annotations the server declares

    • title: Capture word
    • readOnlyHint: false
    • destructiveHint: false
Changes things 5Claude Code: ask
  • check_wordsBatch lookup: for a list of target-language words, tell me which ones are already in the user's Minddory deck and how well they know each.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Batch lookup: for a list of target-language words, tell me which ones are already in the user's Minddory deck and how well they know each. Use this BEFORE glossing or capturing vocabulary from a message - it answers "which of these are actually new to this user" in one call, so you can skip words they have already mastered, gloss only the genuinely new ones, and notice when a word they are currently failing shows up in conversation. Each result is {word, in_deck, mastery, translation, next_review_at, due}; mastery is one of not_in_deck, new, review, struggling, mastered. The response also pulls out the three lists you usually act on - `not_in_deck`, `known` and `struggling` - so you do not have to sort them yourself; words in mid-review are in `words` only. Entries that could not be answered as sent are listed in `skipped` as {input, reason: blank|duplicate, answered_as?} - a duplicate WAS answered, under the entry named by `answered_as`. Omit `lang` and it resolves to the user's own primary learning language (`lang_defaulted: true` in the response says so); pass it whenever you know which language you are in. Prefer this over calling get_card once per word.

    Annotations the server declares

    • title: Check words against deck
    • readOnlyHint: true
  • get_system_instructionsCall this at the START of every new conversation, before your first reply, to load the user's Minddory setup and your role as their proactive language partner: CEFR level, target/s…1 finding

    Why it is in this group

    • The name "get_system_instructions" 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

    • Warn

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

      Matched text

      annotations: {"readOnlyHint":true}; The name "get_system_instructions" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Call this at the START of every new conversation, before your first reply, to load the user's Minddory setup and your role as their proactive language partner: CEFR level, target/source languages, due-card count, weak words, and how to capture. The user connected Minddory to actively improve their language through this chat, so use it to tailor your help to their level and goals. Pass `lang` when you know which language the user wants to practice right now - the language they are conversing in, or one they named explicitly (including a regional variant like en-us or en-gb) - so the returned profile is scoped to that language. Re-call this tool with the new `lang` if the user switches practice language or requests a specific variant mid-conversation.

    Annotations the server declares

    • title: Get session instructions
    • readOnlyHint: true
  • log_interactionAppend a generic interaction event to the answers log.1 finding

    Why it is in this group

    • The name "log_interaction" says "log": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "log_interaction" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false}; The name "log_interaction" says "log": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Append a generic interaction event to the answers log. Use for lookups, AI discussions, and reading-in-context signals.

    Annotations the server declares

    • title: Log interaction
    • readOnlyHint: false
    • destructiveHint: false
  • mark_demonstratedConfidence-weighted spaced-repetition boost when the user has used a word correctly: the card moves further out in the review schedule.No findings

    Why it is in this group

    • The name "mark_demonstrated" says "mark": a word for a change.
    Description, as the server wrote it
    Confidence-weighted spaced-repetition boost when the user has used a word correctly: the card moves further out in the review schedule. Logs an answer row even if no flashcard exists.

    Annotations the server declares

    • title: Mark word demonstrated
    • readOnlyHint: false
    • destructiveHint: false
  • mark_struggledSpaced-repetition degrade for a word the user just got wrong: the card comes back sooner.No findings

    Why it is in this group

    • The name "mark_struggled" says "mark": a word for a change.
    Description, as the server wrote it
    Spaced-repetition degrade for a word the user just got wrong: the card comes back sooner. ease_factor drops, interval resets, repetitions reset.

    Annotations the server declares

    • title: Mark word struggled
    • readOnlyHint: false
    • destructiveHint: false
Only reads 6Claude Code: allow
  • get_active_vocabGet the user's most actively encountered target-language words (from past capture_word + log_interaction events), ranked by frequency over a lookback window.No findings

    Why it is in this group

    • The name "get_active_vocab" says "get": a word for reading.
    Description, as the server wrote it
    Get the user's most actively encountered target-language words (from past capture_word + log_interaction events), ranked by frequency over a lookback window. Use to surface "frontier" words the user keeps touching when they ask "what should I learn next" or when you want context-aware suggestions.

    Annotations the server declares

    • title: Get active vocabulary
    • readOnlyHint: true
  • get_cardSingle card detail by word (case-insensitive).No findings

    Why it is in this group

    • The name "get_card" says "get": a word for reading.
    Description, as the server wrote it
    Single card detail by word (case-insensitive). Returns translation, mastery, and last 10 events.

    Annotations the server declares

    • title: Get card detail
    • readOnlyHint: true
  • get_known_wordsWords the user has verified known via flashcard practice.No findings

    Why it is in this group

    • The name "get_known_words" says "get": a word for reading.
    Description, as the server wrote it
    Words the user has verified known via flashcard practice. Paginated keyset on flashcards.id.

    Annotations the server declares

    • title: Get known words
    • readOnlyHint: true
  • get_queueCards due now and due within the next 24 hours.No findings

    Why it is in this group

    • The name "get_queue" says "get": a word for reading.
    Description, as the server wrote it
    Cards due now and due within the next 24 hours.

    Annotations the server declares

    • title: Get review queue
    • readOnlyHint: true
  • get_recent_activityEvent log slice with optional surface filter and keyset pagination on answers.id.No findings

    Why it is in this group

    • The name "get_recent_activity" says "get": a word for reading.
    Description, as the server wrote it
    Event log slice with optional surface filter and keyset pagination on answers.id.

    Annotations the server declares

    • title: Get recent activity
    • readOnlyHint: true
  • get_user_profileProfile snapshot: CEFR level, target/source languages, due card count, weak words, recent lookups.No findings

    Why it is in this group

    • The name "get_user_profile" says "get": a word for reading.
    Description, as the server wrote it
    Profile snapshot: CEFR level, target/source languages, due card count, weak words, recent lookups. Pass `lang` to scope the snapshot to one learning language (for users learning several); omit it for the user's primary language.

    Annotations the server declares

    • title: Get user profile
    • readOnlyHint: true

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.

Install

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

claude mcp add --transport http brain https://api.minddory.com/v1/brain/mcp

Run in a terminal.

Claude Code permissions

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

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__brain__get_user_profile",
      "mcp__brain__get_known_words",
      "mcp__brain__get_queue",
      "mcp__brain__get_card",
      "mcp__brain__get_recent_activity",
      "mcp__brain__get_active_vocab"
    ],
    "ask": [
      "mcp__brain__get_system_instructions",
      "mcp__brain__log_interaction",
      "mcp__brain__mark_demonstrated",
      "mcp__brain__mark_struggled",
      "mcp__brain__capture_word",
      "mcp__brain__capture_grammar_mistake",
      "mcp__brain__check_words"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as brain. Review it before you use it.