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.
31 tools: 1 do something that can't be undone, 11 change things and 19 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things11Claude Code: ask: see these tools
- Only reads19Claude Code: allow: see these tools
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_registryFindings
Matches of fixed checks, with the text they matched.
- Warngenerate_quiz
The server marks "generate_quiz" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "generate_quiz" says "generate": a word for a change.
- Warnset_persona
The server marks "set_persona" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "set_persona" says "set": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "generate_quiz" says "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "set_persona" says "set": a word for a change.
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_session_trendsAuth-only.No findings
Why it is in this group
- The name "get_class_session_trends" says "get": a word for reading.
Description, as the server wrote it Auth-only. Tutor-only. Aggregate class-level trends across the tutor's classes (default 14 days, max 30). Pass `class_id` to scope to one class; omit it to get a worst-first rollup across up to 25 classes plus 1–3 struggling students.
Annotations the server declares
- title: Class Session Trends
- 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_recommended_next_actionOne-line 'do this next' hint derived from the user's current lifecycle phase.No findings
Why it is in this group
- The name "get_recommended_next_action" says "get": a word for reading.
Description, as the server wrote it One-line 'do this next' hint derived from the user's current lifecycle phase. Useful when the agent wants a quick recommendation without rendering a full guidance card.
Annotations the server declares
- title: Recommended Next Action
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- 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_session_trendsAuth-only.No findings
Why it is in this group
- The name "get_session_trends" says "get": a word for reading.
Description, as the server wrote it Auth-only. Personal study trends over a window (default 14 days, max 90): session count, total minutes, accuracy trend (up/down/flat), and top-missed words. Use after a user asks 'how am I trending / am I improving / which words keep tripping me up'.
Annotations the server declares
- title: Session Trends
- 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_registryRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.
