Skip to content

Vocab Voyage

by jaideepdhanoa · remote · no sign-in to list tools · v1.1.1 · published by GitHub user jaideepdhanoa

20 MCP tools + 17 widgets for SAT/ISEE/SSAT/GRE/GMAT/LSAT prep. Flashcards, quizzes & games. Hosted.

Final · 1Changes · 11

31 tools: 1 do something that can't be undone, 11 change things and 19 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 vocab-voyage https://gponcrussdahcdyrlhcr.supabase.co/functions/v1/mcp-server?ref=mcp_registry

Findings

Matches of fixed checks, with the text they matched.

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

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "generate_quiz" says "generate": a word for a change.

    What this check looks for
  • The server marks "set_persona" 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 "set_persona" says "set": a word for a change.

    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.

31 tools

Can't be undone 1Claude Code: ask
  • resend_pending_inviteResend a pending parent invite by id.No findings

    Why it is in this group

    • The name "resend_pending_invite" says "resend": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Resend a pending parent invite by id. Use after get_pending_invites surfaces an invite expiring in <24h, or when the user explicitly asks to resend. Re-emails the existing invite_token; no new code is generated. 60s per-invite cooldown. Caller must own the invite. Requires sign-in.

    Annotations the server declares

    • title: Resend Pending Invite
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 11Claude Code: ask
  • award_game_xpAward score-based XP from a game/activity (separate from study-time XP).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.
    Description, as the server wrote it
    Award score-based XP from a game/activity (separate from study-time XP). Cascades to the leaderboard via DB trigger. Requires sign-in.

    Annotations the server declares

    • title: Award Game XP
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • file_support_ticketFile a real human-followup support ticket on behalf of the signed-in user.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.
    Description, as the server wrote it
    File a real human-followup support ticket on behalf of the signed-in user. Use this when the user reports a bug, account lockout, complaint about a tutor, or anything Sparkle/the agent cannot resolve from data. The ticket is emailed to the support team and a confirmation is sent to the user with a 1-business-day SLA. Vocab Voyage is completely free, so there is nothing to bill — never raise pricing, plans or upgrades. Categories: billing (legacy, use account instead), bug, account, complaint, feedback, other. Requires sign-in.

    Annotations the server declares

    • title: File Support Ticket
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • generate_quizUse this when the user wants to practice, be quizzed, or test their knowledge across multiple words at once.1 finding

    Why it is in this group

    • The name "generate_quiz" says "generate": 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 "generate_quiz" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "generate_quiz" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Use this when the user wants to practice, be quizzed, or test their knowledge across multiple words at once. Generates a 1–10 question multiple-choice quiz for a test family (isee, ssat, sat, psat, gre, gmat, lsat, general). Renders the interactive Vocab Voyage quiz widget on supporting hosts; per-answer taps persist mastery for signed-in users. Do not use for definition lookups — call get_definition instead. Do not use for spaced-repetition flashcards — call get_flashcards instead.

    Annotations the server declares

    • title: Generate Quiz
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • mark_word_difficultManually mark a word as still-learning for the signed-in user (resets mastery toward learning band).No findings

    Why it is in this group

    • The name "mark_word_difficult" says "mark": a word for a change.
    Description, as the server wrote it
    Manually mark a word as still-learning for the signed-in user (resets mastery toward learning band). Requires sign-in.

    Annotations the server declares

    • title: Mark Word Difficult
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • mark_word_knownManually mark a word as mastered for the signed-in user (same as the flashcard 'I knew this' override).No findings

    Why it is in this group

    • The name "mark_word_known" says "mark": a word for a change.
    Description, as the server wrote it
    Manually mark a word as mastered for the signed-in user (same as the flashcard 'I knew this' override). Requires sign-in.

    Annotations the server declares

    • title: Mark Word Known
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • nudge_childParent-only.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.
    Description, as the server wrote it
    Parent-only. Sends a 'check-in' push notification (and email fallback) to a linked child. Use when the parent says things like 'remind my kid to study', 'nudge my child', 'tell Sam to do their words today'. The server enforces a 24h cooldown per child — if rate-limited the response includes retry_after_hours. NEVER spoof a different parent — the calling user must already be linked to the child. Requires sign-in.

    Annotations the server declares

    • title: Nudge Child
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • play_gameUse this when the user wants to play a vocabulary game, asks for something fun, or wants to learn through play.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.
    Description, as the server wrote it
    Use this when the user wants to play a vocabulary game, asks for something fun, or wants to learn through play. Launches one of 11 mini-games inside the host chat. Renders the matching ui://vocab-voyage/game/{slug} widget on supporting hosts; falls back to a deep link elsewhere. Per-question answers persist via record_word_result; round completion fires record_session_complete + award_game_xp so MCP play counts toward streaks, XP, and mastery for signed-in users. Supported slugs: word_match, spelling_bee, speed_round, synonym_showdown, word_scramble, fill_in_blank, context_clues, word_guess, picture_match, crossword, word_search. Do not use for a serious test-prep quiz — call generate_quiz instead.

    Annotations the server declares

    • title: Play Mini-Game
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • record_session_completeRecord a completed study session: writes study_sessions, awards study-time XP (+1/min, capped 30/day), and updates the daily streak.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.
    Description, as the server wrote it
    Record a completed study session: writes study_sessions, awards study-time XP (+1/min, capped 30/day), and updates the daily streak. Use after a play_game / quiz / flashcard session ends. Requires sign-in.

    Annotations the server declares

    • title: Record Session Complete
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • record_word_resultPersist a single word answer (correct/incorrect) to the user's mastery progress.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.
    Description, as the server wrote it
    Persist a single word answer (correct/incorrect) to the user's mastery progress. Mirrors the web app's word-mastery scaling so MCP study counts toward leaderboards and streaks. Requires sign-in.

    Annotations the server declares

    • title: Record Word Result
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • set_personaBias subsequent Sparkle guidance toward a persona (student | parent | tutor | explorer).1 finding

    Why it is in this group

    • The name "set_persona" says "set": 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 "set_persona" 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 "set_persona" says "set": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Bias subsequent Sparkle guidance toward a persona (student | parent | tutor | explorer). Session-scoped: the host should pass the chosen persona back to get_sparkle_guidance.

    Annotations the server declares

    • title: Set Persona
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • update_adaptive_levelRun the adaptive-mastery promotion logic for the signed-in user (delegates to the web app's update-adaptive-mastery function).No findings

    Why it is in this group

    • The name "update_adaptive_level" says "update": a word for a change.
    Description, as the server wrote it
    Run the adaptive-mastery promotion logic for the signed-in user (delegates to the web app's update-adaptive-mastery function). Requires sign-in.

    Annotations the server declares

    • title: Update Adaptive Level
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 19Claude Code: allow
  • explain_word_in_contextExplain what a word means inside a specific sentence — useful when a word has multiple meanings.No findings

    Why it is in this group

    • The name "explain_word_in_context" says "explain": a word for reading.
    Description, as the server wrote it
    Explain what a word means inside a specific sentence — useful when a word has multiple meanings.

    Annotations the server declares

    • title: Explain in Context
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_child_session_detailAuth-only.No findings

    Why it is in this group

    • The name "get_child_session_detail" says "get": a word for reading.
    Description, as the server wrote it
    Auth-only. Parent-only. Detailed breakdown for a single child's study/quiz session — accuracy, missed words, duration. Defaults to the most recent session for the parent's first linked child if no `child_user_id` / `session_id` is supplied. Ownership-gated: returns an error for unlinked children.

    Annotations the server declares

    • title: Child Session Detail
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_class_standingUse this when a signed-in student asks how they're doing in their tutor class, who's ahead, who their rival is, or who they should challenge.No findings

    Why it is in this group

    • The name "get_class_standing" says "get": a word for reading.
    Description, as the server wrote it
    Use this when a signed-in student asks how they're doing in their tutor class, who's ahead, who their rival is, or who they should challenge. Auth-only. Returns weekly XP rank inside the user's tutor class plus a winnable rival suggestion (similar weekly XP). NEVER name the class leader unless the user is rank #1 — the response uses '(top student)' as a deliberate placeholder. Renders the interactive class-standing widget on supporting hosts; falls back to markdown elsewhere. Anonymous callers receive a sign-in prompt.

    Annotations the server declares

    • title: Class Standing
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_course_word_listGet a sample of vocabulary words from a specific Vocab Voyage course.No findings

    Why it is in this group

    • The name "get_course_word_list" says "get": a word for reading.
    Description, as the server wrote it
    Get a sample of vocabulary words from a specific Vocab Voyage course. Use list_courses to discover slugs.

    Annotations the server declares

    • title: Course Word List
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_definitionUse this when the user asks what a specific word means, requests its definition, part of speech, synonyms/antonyms, or an example sentence.No findings

    Why it is in this group

    • The name "get_definition" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the user asks what a specific word means, requests its definition, part of speech, synonyms/antonyms, or an example sentence. Returns curated dictionary data from the Vocab Voyage corpus. Do not use for sentence-level meaning disambiguation (call explain_word_in_context) or for daily word prompts (call get_word_of_the_day).

    Annotations the server declares

    • title: Get Definition
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_flashcardsUse this when the user asks for flashcards, wants to drill words individually, or wants a tap-to-flip review session.No findings

    Why it is in this group

    • The name "get_flashcards" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the user asks for flashcards, wants to drill words individually, or wants a tap-to-flip review session. Returns 1–12 cards for a test family. Renders the interactive Vocab Voyage flashcards widget on supporting hosts; per-card 'I knew it / I didn't' buttons persist mastery for signed-in users. Do not use for multiple-choice testing (call generate_quiz) or for a single word lookup (call get_definition).

    Annotations the server declares

    • title: Get Flashcards
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • get_my_progressUse this when the signed-in user asks about their own streak, XP, words mastered, recent activity, or 'how am I doing'.No findings

    Why it is in this group

    • The name "get_my_progress" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the signed-in user asks about their own streak, XP, words mastered, recent activity, or 'how am I doing'. Auth-only personal dashboard. Renders the interactive Vocab Voyage progress widget on supporting hosts; falls back to markdown elsewhere. Anonymous callers receive a sign-in prompt. Do not use for global stats or other users' progress.

    Annotations the server declares

    • title: My Progress
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • get_pending_invitesUse this when the signed-in user asks about pending parent invites, share codes, or whether their parent invite has been accepted yet.No findings

    Why it is in this group

    • The name "get_pending_invites" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the signed-in user asks about pending parent invites, share codes, or whether their parent invite has been accepted yet. Returns each pending invite with hours_until_expiry. RULE: if any invite has hours_until_expiry < 24 (and not expired), proactively offer to resend it via the resend-parent-invite flow. If expired, offer to send a fresh invite. Requires sign-in.

    Annotations the server declares

    • title: Pending Invites
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_recent_mistakesUse this when the signed-in user asks about words they've gotten wrong, missed words, words to review, or wants to revisit recent mistakes.No findings

    Why it is in this group

    • The name "get_recent_mistakes" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the signed-in user asks about words they've gotten wrong, missed words, words to review, or wants to revisit recent mistakes. Returns up to 25 words from the last N days (default 7) with miss-rate and last-seen timestamp, plus a link to the in-app Recent Mistakes page. SUMMARISE — never dump every row; tell the user the count, name 2–3 sample words, and recommend the page URL. Requires sign-in.

    Annotations the server declares

    • title: Recent Mistakes
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_session_detailUse this when the signed-in user asks 'what did I miss in [that session]', 'which words tripped me up', or 'what was my accuracy on session X'.No findings

    Why it is in this group

    • The name "get_session_detail" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the signed-in user asks 'what did I miss in [that session]', 'which words tripped me up', or 'what was my accuracy on session X'. Pass a session_id (study_sessions.id or adaptive_sessions.id, usually obtained from get_recent_session_results / a picker chip). Returns title, accuracy %, wrong_words[] (max 10), and a per-card timeline (truncated to first 20 events). Cite at least one wrong word and the accuracy in your reply.

    Annotations the server declares

    • title: Session Detail
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_sparkle_guidanceReturns Vocab Voyage's lifecycle-aware guidance: the user's current phase (e.g.No findings

    Why it is in this group

    • The name "get_sparkle_guidance" says "get": a word for reading.
    Description, as the server wrote it
    Returns Vocab Voyage's lifecycle-aware guidance: the user's current phase (e.g. student.at_risk), a friendly greeting, 2–3 recommended tool calls, and an optional CTA. Renders the session-debrief widget on supporting hosts. Anonymous callers get visitor.* phase suggestions.

    Annotations the server declares

    • title: Sparkle Guidance
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • get_study_plan_recommendationAuth-only.No findings

    Why it is in this group

    • The name "get_study_plan_recommendation" says "get": a word for reading.
    Description, as the server wrote it
    Auth-only. Returns a personalized N-day study plan (default 7, range 3–7) chosen from one of four focus modes (weak-topic-drill / streak-recovery / new-words / review-mastery) based on the user's recent trends. Inline only the first 3 days; full plan persists when the user clicks the Vocab Voyage start link.

    Annotations the server declares

    • title: Study Plan Recommendation
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • get_word_of_the_dayUse this when the user asks for today's word, a daily vocabulary nudge, or a single-word warmup.No findings

    Why it is in this group

    • The name "get_word_of_the_day" says "get": a word for reading.
    Description, as the server wrote it
    Use this when the user asks for today's word, a daily vocabulary nudge, or a single-word warmup. Returns today's deterministic Word of the Day (definition, part of speech, example, synonyms/antonyms), optionally scoped to a test family (isee, ssat, sat, psat, gre, gmat, lsat, general). Do not use for arbitrary lookups — call get_definition instead.

    Annotations the server declares

    • title: Word of the Day
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_coursesLists all 13 Vocab Voyage courses with their slugs and descriptions.No findings

    Why it is in this group

    • The name "list_courses" says "list": a word for reading.
    Description, as the server wrote it
    Lists all 13 Vocab Voyage courses with their slugs and descriptions.

    Annotations the server declares

    • title: List Courses
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_starter_promptsLists Vocab Voyage's MCP starter prompts (also exposed via the standard MCP prompts/list endpoint).No findings

    Why it is in this group

    • The name "list_starter_prompts" says "list": a word for reading.
    Description, as the server wrote it
    Lists Vocab Voyage's MCP starter prompts (also exposed via the standard MCP prompts/list endpoint). Useful for hosts that don't yet support prompts/list.

    Annotations the server declares

    • title: List Starter Prompts
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • study_plan_previewUse this when the user asks for a study plan, a multi-day prep schedule, or how to prepare for a test by date.No findings

    Why it is in this group

    • The name "study_plan_preview" says "preview": a word for reading.
    Description, as the server wrote it
    Use this when the user asks for a study plan, a multi-day prep schedule, or how to prepare for a test by date. Returns a 7-day plan (5 words/day) for a given test family. Renders the interactive Vocab Voyage study-plan widget on supporting hosts; tapping 'Start Day N' launches a flashcard session seeded with that day's words. Do not use for a single quiz session — call generate_quiz instead. Do not use for one-off lookups — call get_definition instead.

    Annotations the server declares

    • title: Study Plan Preview
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • 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.

Install

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

claude mcp add --transport http vocab-voyage https://gponcrussdahcdyrlhcr.supabase.co/functions/v1/mcp-server?ref=mcp_registry

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__vocab-voyage__get_word_of_the_day",
      "mcp__vocab-voyage__get_definition",
      "mcp__vocab-voyage__get_course_word_list",
      "mcp__vocab-voyage__list_courses",
      "mcp__vocab-voyage__explain_word_in_context",
      "mcp__vocab-voyage__study_plan_preview",
      "mcp__vocab-voyage__get_flashcards",
      "mcp__vocab-voyage__get_my_progress",
      "mcp__vocab-voyage__get_recent_mistakes",
      "mcp__vocab-voyage__get_session_detail",
      "mcp__vocab-voyage__get_pending_invites",
      "mcp__vocab-voyage__get_class_standing",
      "mcp__vocab-voyage__get_sparkle_guidance",
      "mcp__vocab-voyage__get_recommended_next_action",
      "mcp__vocab-voyage__list_starter_prompts",
      "mcp__vocab-voyage__get_session_trends",
      "mcp__vocab-voyage__get_class_session_trends",
      "mcp__vocab-voyage__get_child_session_detail",
      "mcp__vocab-voyage__get_study_plan_recommendation"
    ],
    "ask": [
      "mcp__vocab-voyage__generate_quiz",
      "mcp__vocab-voyage__play_game",
      "mcp__vocab-voyage__record_word_result",
      "mcp__vocab-voyage__record_session_complete",
      "mcp__vocab-voyage__award_game_xp",
      "mcp__vocab-voyage__mark_word_known",
      "mcp__vocab-voyage__mark_word_difficult",
      "mcp__vocab-voyage__update_adaptive_level",
      "mcp__vocab-voyage__file_support_ticket",
      "mcp__vocab-voyage__nudge_child",
      "mcp__vocab-voyage__resend_pending_invite",
      "mcp__vocab-voyage__set_persona"
    ],
    "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 vocab-voyage. Review it before you use it.