mcp-vocabulary-trainer
Allows ChatGPT to interact with the Sprachen vocabulary trainer via MCP, providing tools for managing domains, entries, conjugations, review (Leitner boxes), and stats, with optional OpenAI-assisted translation suggestions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-vocabulary-trainerShow me my due vocabulary reviews for today."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Sprachen — Multilingual Vocabulary Trainer with MCP Agent
A local, single-user vocabulary trainer with Leitner spaced repetition, domain/topic organization, and a ChatGPT MCP agent for lessons — plus optional OpenAI assistance in the app.
Project page
More background and write-up:
Related MCP server: FlashLearn
Runs locally
This project is meant to run on your own machine (or local Docker). It is not a hosted SaaS, and there is no cloud/CDK deploy in this repo.
Single-user, no login / no auth
Data stays in a local SQLite file under
data/Do not expose the app to the public internet without adding your own access control
Features
Leitner 6-box spaced repetition
Multiple languages (UI + vocabulary): German, English, Spanish, French, Portuguese, Swiss German
Domains/topics for organizing entries
Fuzzy answer matching (typo-tolerant)
Conjugation practice
Grammar reference (cheat sheets; create/refine via MCP chat)
Worksheets / grammar tests (create via MCP, fill in the app, results for later analysis)
Optional OpenAI-powered translation suggestions
ChatGPT MCP at
/mcp(persistence + review + grammar + worksheets; AI stays in ChatGPT)
Quick start
Prerequisites
Node.js 18+ and npm
An OpenAI API key if you want AI features (optional for core review)
Initialize
git clone <this-repo-url>
cd sprachen
npm install
cp .env.example .envEdit .env and set at least:
DATABASE_URL="file:../data/sprachen.db"
OPENROUTER_API_KEY=your_openrouter_api_key_here
NEXT_PUBLIC_NATIVE_LANG=de
# Optional — train only some targets (omit = all except native):
# NEXT_PUBLIC_TARGET_LANGS=en,es,frNEXT_PUBLIC_NATIVE_LANG is your mother tongue / source language (de | en | es | fr | pt | gsw). Set it once at install time.
NEXT_PUBLIC_TARGET_LANGS limits which languages you train (comma-separated). Example: en,es,fr for three languages only. Leave empty for all targets except your native language. Restart the app after changing it.
Create or upgrade the SQLite database (applies Prisma migrations; backs up an existing DB to data/backups/ first):
npm run db:migrateStart the app:
npm run devOpen http://localhost:4810.
npm run dev starts Next.js on port 4810 (MCP at /mcp) and the optional OpenAI MCP tunnel (health 4811). Web only: npm run dev:web.
Daily on iPhone (offline, no cloud)
Native iOS (download + listen, lock-screen audio): open ios/Sprachen.xcodeproj on this Mac, sign with your Apple ID, and install to the iPhone over USB. Details: docs/ios.md.
The Mac creates the Daily pack and TTS. The iPhone downloads over home Wi-Fi (http://<mac-ip>:4810) and then plays from local files with the Mac off.
Environment
Copy from .env.example:
Variable | Required | Purpose |
| yes | SQLite path relative to |
| for AI features | OpenRouter API key (models are chosen in Settings) |
| yes | Source language ( |
| no | Comma-separated targets, e.g. |
| for ChatGPT tunnel | OpenAI org key with Tunnels Read + Use |
| optional | Tunnel profile name (default |
Never commit .env or .env.production — only .env.example is tracked.
Docker (optional, local)
No separate database container. SQLite lives in ./data:
export OPENROUTER_API_KEY=your_openrouter_api_key_here
npm run docker:upApp: http://localhost:4810.
ChatGPT MCP
Persistence MCP at /mcp (domains, entries, conjugations, review/Leitner, grammar, worksheets, stats). Details for tunnel-client and ChatGPT Developer Mode: SETUP.md.
npm run dev # app + tunnel (development)
npm run start # app + tunnel (after npm run build)
npm run start:web # production web only
npm run mcp:tunnel # tunnel onlyGrammar via chat
Grammar chapters live in the DB and are shown under Grammatik in the app. Content is created and refined in chat (ChatGPT/Claude with MCP):
New — learn a topic → AI asks whether to save →
create_grammar_topic(RULE + EXAMPLES + NOTE)Resume — “I want to learn possessives” →
search_grammar_topics/get_grammar_topic→ discuss from your saved chapterPersonalize — add your own mnemonic →
upsert_grammar_blocks(after confirmation)
Worksheets via chat
Worksheets live in the DB and are shown under Arbeitsblätter in the app. The AI creates them from your grammar/vocabulary; you fill them in the app.
New — ask the AI to load your grammar/vocab/stats, then save a worksheet →
create_worksheet(8 question types: multiple choice, cloze, free text, error correction, sentence reorder, matching, true/false, conjugation grid)List / inspect —
list_worksheets/get_worksheetto resume or tweak an open sheet (update_worksheetuntil completed)Analyse — after you finish in the app,
get_worksheet_resultsshows answers, auto-grade, manual overrides, and weak tags/topics
Voice Chat workaround
ChatGPT Voice Chat cannot call MCP tools directly. Use text MCP first, then voice, then sync back:
Load context in text chat — ask ChatGPT (with the MCP plugin enabled) to fetch the vocabulary / due cards / lesson context you need via MCP.
Start Voice Chat — continue in the same conversation so that context is already in the thread.
Practice by voice — train as usual; Voice Chat only talks, it does not write to the database.
Sync after voice — switch back to text and tell ChatGPT something like: „Okay, aktualisiere die Einträge basierend auf der Lehrer-Erfahrung.“ so it updates progress / entries through MCP.
Without that last step, the spoken lesson stays only in the chat history.
Leitner boxes
Cards move through 6 boxes with increasing intervals:
Box | Interval |
1 | immediately (0 days) — new cards and wrong answers |
2 | 3 days |
3 | 7 days |
4 | 14 days |
5 | 30 days |
6 | 60 days |
Correct → one box up. Wrong → back to box 1. Due cards have nextReviewAt in the past.
Tech stack
Next.js 15 · TypeScript · tRPC · SQLite + Prisma · Tailwind / shadcn/ui · OpenAI (optional) · Vitest
Development
npm run lint
npm run test
npm run build
npm run db:migrate # backup + apply migrations (default on every machine)
npm run db:migrate:dev # create new migrations locally
npm run db:backup # copy DB to data/backups/
npm run update # git pull --rebase, install, migrate, build (PM2 restart via pm_id / PM2_PROCESS)
npm run db:push # optional schema sync shortcut
npm run db:studioLicense
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Save vocabulary from any AI chat; see each word in every language you know; review it with FSRS.
Free: turn your AI chats into spaced-repetition vocabulary. 13 tools, reads and writes.
Lexpad is a vocabulary notebook and flashcard app with spaced repetition (Leitner boxes) for learning words in 81 languages, including English, Spanish, French, German, Arabic, Turkish and Persian. Connect it to ChatGPT, Claude or any MCP client, and your assistant works with the words you collected yourself: • Save words and phrases you ask for, with meanings, example sentences and a level (A1–C2). • Find anything: browse and filter your whole notebook by due, new, struggling, starred or mastered words, level, topic or date added. • Practise: get quizzed on today's due words. Every answer counts as real review, moves the word through the Leitner boxes and keeps your streak. • Edit: fix spellings, change or reorder meanings, star or retire words. Deleting needs its own permission, and the assistant asks first. Lexpad never invents vocabulary: it only works with the words you add, by hand, from a text, or imported from Anki or a Kindle. Sign-in is OAuth on a Lexpad page; your password is never shared, and you can disconnect at any time. Works alongside the Lexpad web app and Android app. Guide and example prompts: https://lexpad.app/features/assistants
Make Anki, Quizlet, Mochi and Brainscape decks and review your vocabulary from the chat.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA vocabulary-bank MCP server that allows users to collect unfamiliar words, organize them into decks, review with spaced repetition, and enrich with definitions and pronunciation, all stored locally.2MIT
- AlicenseNot gradedqualityDmaintenanceLocal Leitner flashcard MCP server enabling AI clients to create decks, manage cards, study with spaced repetition, and track progress.MIT
- FlicenseAqualityCmaintenanceA local MCP server that helps you maintain a personal Japanese learning knowledge base, including vocabulary, confusion relations, mistakes, and spaced-repetition reviews. It provides tools and prompts for managing and reviewing your Japanese learning data without calling external LLM APIs.6-
- AlicenseNot gradedqualityCmaintenanceA lightweight MCP server that adds spaced-repetition flashcards (SM-2) to AI assistants, storing data locally in SQLite and enabling card creation, review, and scheduling.MIT