Vocab Voyage
20 MCP tools + 17 widgets for SAT/ISEE/SSAT/GRE/GMAT/LSAT prep. Flashcards, quizzes & games. Hosted.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (6)
- HIGH
- MEDIUMen get_class_standing
- LOWen explain_word_in_context
- LOWen award_game_xp
- LOWen mark_word_known
- INFOen get_class_standing
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"vocab-voyage": {
"url": "https://gponcrussdahcdyrlhcr.supabase.co/functions/v1/mcp-server?ref=mcp_registry"
}
}
}Puntos de conexión remotos
https://gponcrussdahcdyrlhcr.supabase.co/functions/v1/mcp-server?ref=mcp_registrystreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (31)
🟢get_word_of_the_day(test_family)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"test_family": {
"type": "string",
"description": "Optional test family: isee, ssat, sat, psat, gre, gmat, lsat, general"
}
}
}🟢get_definition(word)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"word": {
"type": "string",
"description": "The word to define"
}
},
"required": [
"word"
]
}🟢generate_quiz(test_family, level, count)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"test_family": {
"type": "string"
},
"level": {
"type": "string",
"description": "Optional difficulty hint"
},
"count": {
"type": "number",
"description": "Number of questions (1–10), default 5"
}
},
"required": [
"test_family"
]
}🟢get_course_word_list(course_slug, limit)
Get a sample of vocabulary words from a specific Vocab Voyage course. Use list_courses to discover slugs.
Esquema de entrada
{
"type": "object",
"properties": {
"course_slug": {
"type": "string"
},
"limit": {
"type": "number",
"description": "1–50, default 20"
}
},
"required": [
"course_slug"
]
}🟢list_courses
Lists all 13 Vocab Voyage courses with their slugs and descriptions.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢explain_word_in_context(word, sentence)
Explain what a word means inside a specific sentence — useful when a word has multiple meanings.
Esquema de entrada
{
"type": "object",
"properties": {
"word": {
"type": "string"
},
"sentence": {
"type": "string",
"description": "The sentence containing the word"
}
},
"required": [
"word",
"sentence"
]
}🟢study_plan_preview(test_family, target_date)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"test_family": {
"type": "string"
},
"target_date": {
"type": "string",
"description": "Optional ISO date (YYYY-MM-DD)"
}
},
"required": [
"test_family"
]
}🟢get_flashcards(test_family, count)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"test_family": {
"type": "string",
"description": "isee, ssat, sat, psat, gre, gmat, lsat, general"
},
"count": {
"type": "number",
"description": "Number of cards (1–12), default 5"
}
}
}🟢get_my_progress
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}⚪play_game(slug, test_family, count)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Game slug: word_match | spelling_bee | speed_round | synonym_showdown | word_scramble | fill_in_blank | context_clues | word_guess | picture_match | crossword | word_search"
},
"test_family": {
"type": "string",
"description": "Optional: isee, ssat, sat, psat, gre, gmat, lsat, general"
},
"count": {
"type": "number",
"description": "Words in the round (4–12, default 8)"
}
},
"required": [
"slug"
]
}⚪record_word_result(word, card_id, is_correct, quiz_attempt_id, selected_answer, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"word": {
"type": "string",
"description": "The word answered (preferred for human input)."
},
"card_id": {
"type": "string",
"description": "Card UUID (preferred when known from a prior tool result)."
},
"is_correct": {
"type": "boolean"
},
"quiz_attempt_id": {
"type": "string",
"description": "Optional quiz_attempt UUID to record a per-question row."
},
"selected_answer": {
"type": "string"
},
"time_taken_seconds": {
"type": "number"
},
"question_type": {
"type": "string",
"description": "e.g. multiple_choice, fill_in_blank, flashcard."
}
},
"required": [
"is_correct"
]
}⚪record_session_complete(deck_id, cards_studied, time_spent_seconds, session_type, session_title, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"deck_id": {
"type": "string",
"description": "Optional deck UUID; omit for ad-hoc MCP sessions."
},
"cards_studied": {
"type": "number"
},
"time_spent_seconds": {
"type": "number"
},
"session_type": {
"type": "string",
"description": "e.g. mcp_word_match, mcp_flashcard, mcp_quiz."
},
"session_title": {
"type": "string"
},
"correct_count": {
"type": "number"
},
"total_count": {
"type": "number"
}
},
"required": [
"cards_studied",
"time_spent_seconds"
]
}⚪award_game_xp(xp, reason)
Award score-based XP from a game/activity (separate from study-time XP). Cascades to the leaderboard via DB trigger. Requires sign-in.
Esquema de entrada
{
"type": "object",
"properties": {
"xp": {
"type": "number",
"description": "XP to award (>= 0)."
},
"reason": {
"type": "string",
"description": "Optional human label for analytics."
}
},
"required": [
"xp"
]
}⚪mark_word_known(word, card_id)
Manually mark a word as mastered for the signed-in user (same as the flashcard 'I knew this' override). Requires sign-in.
Esquema de entrada
{
"type": "object",
"properties": {
"word": {
"type": "string"
},
"card_id": {
"type": "string"
}
}
}⚪mark_word_difficult(word, card_id)
Manually mark a word as still-learning for the signed-in user (resets mastery toward learning band). Requires sign-in.
Esquema de entrada
{
"type": "object",
"properties": {
"word": {
"type": "string"
},
"card_id": {
"type": "string"
}
}
}🟡update_adaptive_level(course_id, words_studied, correct_count, total_count)
Run the adaptive-mastery promotion logic for the signed-in user (delegates to the web app's update-adaptive-mastery function). Requires sign-in.
Esquema de entrada
{
"type": "object",
"properties": {
"course_id": {
"type": "string"
},
"words_studied": {
"type": "number"
},
"correct_count": {
"type": "number"
},
"total_count": {
"type": "number"
}
},
"required": [
"words_studied",
"correct_count",
"total_count"
]
}⚪file_support_ticket(category, summary, conversation_snippet)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"billing",
"bug",
"account",
"complaint",
"feedback",
"other"
],
"description": "Issue category. Use 'bug' for crashes/data loss, 'account' for lockouts/access or any account/access question, 'complaint' for tutor/quality issues, 'feedback' for feature requests. 'billing' is legacy and unused — the product is free."
},
"summary": {
"type": "string",
"minLength": 4,
"maxLength": 500,
"description": "One-line description of the issue (what the user needs)."
},
"conversation_snippet": {
"type": "string",
"maxLength": 2000,
"description": "Optional: last few turns of the conversation for context."
}
},
"required": [
"category",
"summary"
]
}🟢get_recent_mistakes(days, limit)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"days": {
"type": "number",
"description": "Lookback window in days (1–90, default 7)"
},
"limit": {
"type": "number",
"description": "Max words to return (1–50, default 10)"
}
}
}🟢get_session_detail(session_id, include_timeline)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "study_sessions.id or adaptive_sessions.id (UUID)"
},
"include_timeline": {
"type": "boolean",
"description": "Include per-card timeline (default true). Truncated to 20 events."
}
},
"required": [
"session_id"
]
}🟢get_pending_invites
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}⚪nudge_child(child_user_id, reason, message)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"child_user_id": {
"type": "string",
"description": "user_id of the linked child to nudge"
},
"reason": {
"type": "string",
"description": "Optional short reason (≤200 chars), e.g. 'streak at risk'"
},
"message": {
"type": "string",
"description": "Optional personal message (≤280 chars) shown to the child"
}
},
"required": [
"child_user_id"
]
}🟢resend_pending_invite(invite_id)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"invite_id": {
"type": "string",
"description": "The id field returned by get_pending_invites."
}
},
"required": [
"invite_id"
]
}🟢get_class_standing
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢get_sparkle_guidance(persona)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"persona": {
"type": "string",
"description": "Optional persona override: student | parent | tutor | explorer."
}
}
}🟢set_persona(persona)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"persona": {
"type": "string",
"description": "student | parent | tutor | explorer"
}
},
"required": [
"persona"
]
}🟢get_recommended_next_action(persona)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"persona": {
"type": "string",
"description": "Optional persona override."
}
}
}🟢list_starter_prompts
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟢get_session_trends(days)
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'.
Esquema de entrada
{
"type": "object",
"properties": {
"days": {
"type": "number",
"description": "Window size in days (default 14, max 90)."
}
}
}🟢get_class_session_trends(class_id, days)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"class_id": {
"type": "string",
"description": "Optional class id to scope to one class."
},
"days": {
"type": "number",
"description": "Window size in days (default 14, max 30)."
}
}
}🟢get_child_session_detail(child_user_id, session_id)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"child_user_id": {
"type": "string",
"description": "Optional. Defaults to first linked child."
},
"session_id": {
"type": "string",
"description": "Optional. Defaults to the child's most recent session."
}
}
}🟢get_study_plan_recommendation(horizon_days)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"horizon_days": {
"type": "number",
"description": "Plan length in days (3–7, default 7)."
}
}
}Comunidad
Evidencia