
Learn vocabulary from daily life with flashcards, examples, pronunciation and shareable study links.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user asks to learn, study, memorize, review, practice, or create flashcards about any topic. Generate the complete deck in this call and open it in the interactive flashcard UI. Act immediately using the existing conversation and source material; infer language and backLanguage yourself. Never ask the user for language codes, tool arguments, or confirmation of an already requested deck. For a request for 50 cards, submit all 50 completed cards in one call. Keep the response brief and let the study UI show the deck. Examples include 'I want to learn about X', 'teach me X with flashcards', and 'Create an HSK3 vocabulary deck about restaurants'. Do not call a separate add-card tool. Do NOT use when the user asks for a direct explanation without study intent, asks to delete or modify an existing deck, or requests an in-conversation quiz without creating a deck.
The complete generated deck. Include exactly the number of cards the user requested, with every required language-learning field completed; never submit a partial array or placeholders.
A concise, descriptive title for the generated deck.
ISO 639-1 code for the language spoken on the front side (e.g. 'zh' Chinese, 'ja' Japanese, 'vi' Vietnamese). Used for the correct audio voice and saved-deck language. Always infer and set it from the user's target language, never from their current app preference.
Language of the translations on the back. Set from the user’s known language; never assume English. Always set for language-learning decks. Used for reverse-card audio.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http flashcards https://flashcard.fulinlabs.com/api/mcp
Use this when the user asks to learn, study, memorize, review, practice, or create flashcards about any topic. Generate the complete deck in this call and open it in the interactive flashcard UI. Act immediately using the existing conversation and source material; infer language and backLanguage yourself. Never ask the user for language codes, tool arguments, or confirmation of an already requested deck. For a request for 50 cards, submit all 50 completed cards in one call. Keep the response brief and let the study UI show the deck. Examples include 'I want to learn about X', 'teach me X with flashcards', and 'Create an HSK3 vocabulary deck about restaurants'. Do not call a separate add-card tool. Do NOT use when the user asks for a direct explanation without study intent, asks to delete or modify an existing deck, or requests an in-conversation quiz without creating a deck.
| Argument | Type | Description |
|---|---|---|
| cards* | array | The complete generated deck. Include exactly the number of cards the user requested, with every required language-learning field completed; never submit a partial array or placeholders. |
| title* | string | A concise, descriptive title for the generated deck. |
| language | string | ISO 639-1 code for the language spoken on the front side (e.g. 'zh' Chinese, 'ja' Japanese, 'vi' Vietnamese). Used for the correct audio voice and saved-deck language. Always infer and set it from the user's target language, never from their current app preference. |
| backLanguage | string | Language of the translations on the back. Set from the user’s known language; never assume English. Always set for language-learning decks. Used for reverse-card audio. |
{
"type": "object",
"required": [
"title",
"cards"
],
"properties": {
"cards": {
"type": "array",
"items": {
"type": "object",
"required": [
"front",
"back"
],
"properties": {
"back": {
"type": "string",
"minLength": 1,
"description": "Answer, definition, translation, or explanation. For language learning, always use the user's known language (e.g. English). This is the revealed answer when the card is flipped."
},
"front": {
"type": "string",
"minLength": 1,
"description": "Prompt, question, term, word, or phrase. For language learning, always use the target language (the language being learned). For example: Chinese characters, Italian phrases, or Japanese words."
},
"example": {
"type": "string",
"description": "A concise example sentence or usage phrase in the target or subject language. Include when the user requests examples or when teaching a language."
},
"exampleParts": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 3,
"minItems": 3,
"description": "Exactly three strings in this order: [Chinese word or short semantic phrase, tone-marked pinyin for that segment, direct translation of that segment]. Attach adjacent punctuation to the Chinese text."
},
"maxItems": 12,
"minItems": 1,
"description": "For Chinese examples only: every part of the example in order, split into useful words or short semantic phrases. Encode each part compactly as [Chinese text, tone-marked pinyin, direct translation]. Cover the complete example exactly once in no more than 12 parts; attach punctuation to the preceding part."
},
"pronunciation": {
"type": "string",
"description": "Pinyin, romaji, IPA, or another reading guide for the front text. Required for language decks with non-Latin script (Chinese, Japanese, Korean, etc.) and when the user requests pronunciation."
},
"exampleTranslation": {
"type": "string",
"description": "Translation or plain-language explanation of the example."
},
"examplePronunciation": {
"type": "string",
"description": "Pronunciation or romanization of the example sentence."
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1,
"description": "The complete generated deck. Include exactly the number of cards the user requested, with every required language-learning field completed; never submit a partial array or placeholders."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "A concise, descriptive title for the generated deck."
},
"language": {
"enum": [
"zh",
"de",
"es",
"it",
"fr",
"en",
"ko",
"ja",
"vi"
],
"type": "string",
"description": "ISO 639-1 code for the language spoken on the front side (e.g. 'zh' Chinese, 'ja' Japanese, 'vi' Vietnamese). Used for the correct audio voice and saved-deck language. Always infer and set it from the user's target language, never from their current app preference."
},
"backLanguage": {
"enum": [
"zh",
"de",
"es",
"it",
"fr",
"en",
"ko",
"ja",
"vi"
],
"type": "string",
"description": "Language of the translations on the back. Set from the user’s known language; never assume English. Always set for language-learning decks. Used for reverse-card audio."
}
},
"additionalProperties": false
}Use this when the user explicitly asks to save or share a deck on the website, or chooses Learn on website in the study widget. It sends the supplied deck to Fulin Labs and creates a persistent shareable deck link. Anyone with the link can read the deck. Do not call merely to preview or study a deck. Repeating the call may create another deck.
| Argument | Type | Description |
|---|---|---|
| cards* | array | The cards the user explicitly chose to save on Fulin Labs. |
| title* | string | The title of the deck the user chose to save. |
| language | string | Optional language code for the deck's front side. |
{
"type": "object",
"required": [
"title",
"cards"
],
"properties": {
"cards": {
"type": "array",
"items": {
"type": "object",
"required": [
"front",
"back"
],
"properties": {
"back": {
"type": "string",
"minLength": 1,
"description": "Answer, definition, translation, or explanation. For language learning, always use the user's known language (e.g. English). This is the revealed answer when the card is flipped."
},
"front": {
"type": "string",
"minLength": 1,
"description": "Prompt, question, term, word, or phrase. For language learning, always use the target language (the language being learned). For example: Chinese characters, Italian phrases, or Japanese words."
},
"example": {
"type": "string",
"description": "A concise example sentence or usage phrase in the target or subject language. Include when the user requests examples or when teaching a language."
},
"exampleParts": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 3,
"minItems": 3,
"description": "Exactly three strings in this order: [Chinese word or short semantic phrase, tone-marked pinyin for that segment, direct translation of that segment]. Attach adjacent punctuation to the Chinese text."
},
"maxItems": 12,
"minItems": 1,
"description": "For Chinese examples only: every part of the example in order, split into useful words or short semantic phrases. Encode each part compactly as [Chinese text, tone-marked pinyin, direct translation]. Cover the complete example exactly once in no more than 12 parts; attach punctuation to the preceding part."
},
"pronunciation": {
"type": "string",
"description": "Pinyin, romaji, IPA, or another reading guide for the front text. Required for language decks with non-Latin script (Chinese, Japanese, Korean, etc.) and when the user requests pronunciation."
},
"exampleTranslation": {
"type": "string",
"description": "Translation or plain-language explanation of the example."
},
"examplePronunciation": {
"type": "string",
"description": "Pronunciation or romanization of the example sentence."
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1,
"description": "The cards the user explicitly chose to save on Fulin Labs."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The title of the deck the user chose to save."
},
"language": {
"enum": [
"zh",
"de",
"es",
"it",
"fr",
"en",
"ko",
"ja",
"vi"
],
"type": "string",
"description": "Optional language code for the deck's front side."
}
},
"additionalProperties": false
}Use this when the flashcard widget requests speech audio for the current card.
| Argument | Type | Description |
|---|---|---|
| text* | string | Text to speak. |
| language* | string | Language of the text being spoken. Always specify the current side’s language; never default to the other side or app preferences. |
{
"type": "object",
"required": [
"text",
"language"
],
"properties": {
"text": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Text to speak."
},
"language": {
"enum": [
"zh",
"de",
"es",
"it",
"fr",
"en",
"ko",
"ja",
"vi"
],
"type": "string",
"description": "Language of the text being spoken. Always specify the current side’s language; never default to the other side or app preferences."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.