Konakai tool reference

The Konakai plugin is one MCP server with three tools. The AI does the teaching; the tools read and save the learner’s study. How to add Konakai.

Connecting

  • Server: https://api.konakai.ai/mcp, Streamable HTTP.
  • Sign-in: OAuth 2.1 authorization code with PKCE, on konakai.ai. Scopes: learning:read, learning:write and offline_access (refresh tokens). Each host uses its own pre-registered client; dynamic client registration is off.
  • Account: a Konakai account, for adults 18 and over in the United States.
  • Results: JSON in a text block, also as structuredContent.

start_here

Open Saved Study · Read · scope learning:read

Changes nothing. Counts against the daily allowance.

Inputs
FieldTypeRequiredLimitsMeaning
target_languagestringnomatches ^[a-z]{2,3}$Code of the language the learner is studying, when they have named it.

Returns: target_language, native_language, material_languages, due_cards, open_mistakes, recent_lines, recent_topics, story, preferences, instruction. Empty fields are left out.

get_material

Get Saved Material · Read · scope learning:read

Changes nothing. Counts against the daily allowance.

Inputs
FieldTypeRequiredLimitsMeaning
target_languagestringnomatches ^[a-z]{2,3}$Code of the language the material is in: the one this chat studies.
categorieslist of stringyeseach one of "lines", "words", "mistakes", "topics", "story"; at least 1 item; at most 5 itemsWhat to get: saved lines, words, mistakes, topics, or the story.
searchlist of stringnoat least 1 item; at most 10 items; each at least 1 character; each at most 100 charactersTerms to search for, each on its own, in either language. Omit to list without searching.
due_onlybooleanno—Only lines and words due for review.
resolved_mistakesbooleanno—Mistakes the learner has since gotten right, instead of open ones.
pageintegernofrom 1; to 100Which page of each listing, from 1.

Returns: lines, words, mistakes, topics, more, story, searches, instruction. Empty fields are left out.

save_material

Save Study · Write · scope learning:write

Adds lines, words, mistakes and topics to the learner’s study; a rating schedules that card’s next review; a corrected mistake is marked resolved. The story and preferences it sends replace the saved ones, and an empty preferences value clears them. Nothing already saved is saved twice. It sends nothing to anyone and takes no payment.

Inputs
FieldTypeRequiredLimitsMeaning
target_languagestringyesmatches ^[a-z]{2,3}$Code of the language being learned.
native_languagestringyesmatches ^[a-z]{2,3}$Code of the learner's native language, the one the translations are in.
itemslist of objectnoat most 60 itemsEvery target-language line you taught or had the learner practice since your last save in this chat, in its correct form, at the sentence, phrase and collocation level, including lines they asked for, and each word you taught on its own. Don't re-list a word that appears inside a listed line; list a word on its own only when no line contains it.
items[].content_typestringyesone of "word", "collocation", "phrase", "sentence"What this line is: "word" = one atomic target-language word (exactly one content_array element), a one-word sentence included; "collocation" = a fixed multi-word combination; "phrase" = a short multi-word unit below clause level; "sentence" = a clause or sentence of two or more words. Everything except "word" has two or more content_array elements.
items[].contentstringyesat most 1000 charactersFull target-language display string.
items[].romanizationstringnoat most 1000 charactersCanonical written romanization/transliteration of the full non-Roman target-language display string; never an invented sound-it-out respelling.
items[].translationstringyesat most 1000 charactersFull-line translation in learner's native language.
items[].content_arraylist of stringyesat least 1 item; at most 100 items; each at most 500 charactersOrdered target-language vocabulary elements modeled in this line, one element per array entry. Each element is one atomic word of the target language — never a clause, sentence, multi-word combination, or standalone punctuation; decompose multi-word lines into their word elements and omit punctuation. Word boundaries are the target language's, not the learner's: a single word in the learner's language often glosses several target-language words, and each of those is its own element.
items[].romanization_arraylist of stringnoat most 100 items; each at most 500 charactersCanonical written romanization/transliteration elements aligned by position with content_array, one per array entry; never invented sound-it-out respellings.
items[].translation_arraylist of stringnoat most 100 items; each at most 500 charactersTranslation/gloss elements aligned by position with content_array, one per array entry. Required for multi-element content_array; give each vocabulary element its own single learner-language gloss. Each gloss is one rendering — never slash-joined or comma-joined alternates within one entry.
mistakeslist of objectnoat most 30 itemsThe learner's mistakes since your last save in this chat. A mistake is an answer the learner gave to a prompt with an expected answer that was wrong and stayed corrected. An answer the learner says was misheard is what they say they said, and no mistake once it is accepted.
mistakes[].expectedobjectyes—The right answer, as a card.
mistakes[].expected.contentstringyesat most 1000 charactersThe target-language line.
mistakes[].expected.romanizationstringnoat most 1000 charactersCanonical written romanization of `content`, for a non-Roman target language.
mistakes[].expected.translationstringyesat most 1000 charactersThe line's meaning in the learner's native language.
mistakes[].answerobjectyes—What the learner answered, as a card: an answer they said in the target language is its `content`, with `translation` a literal rendering of those words, never the meaning they were aiming for; a meaning they gave is its `translation`, with `content` that meaning put into the target language: a different line from the one they were asked about.
mistakes[].answer.contentstringyesat most 1000 charactersThe target-language line.
mistakes[].answer.romanizationstringnoat most 1000 charactersCanonical written romanization of `content`, for a non-Roman target language.
mistakes[].answer.translationstringyesat most 1000 charactersThe line's meaning in the learner's native language.
mistakes[].directionstringyesone of "production", "reception"production when they said or wrote the right answer wrong; reception when they misunderstood a target-language line.
ratingslist of objectnoat most 60 itemsOne rating for each saved line or word you quizzed the learner on since your last save in this chat.
ratings[].textstringyesat least 1 character; at most 1000 charactersThe saved line or word you quizzed, as written.
ratings[].ratingnumberyesone of 1, 2, 3, 4Your rating of the learner's recall: 1 = wrong or forgotten, 2 = mostly wrong, 3 = mostly right with a minor form-only issue (meaning intact), 4 = correct, near-perfect, or confidently known.
mistakes_correctedlist of stringnoat most 60 items; each at least 1 character; each at most 1000 charactersThe right answer of each open mistake the learner answered correctly since your last save in this chat. A record is answered correctly when the learner's first attempt at it, before any hint, is right; a turn the tutor said it did not catch is no attempt.
topicslist of stringnoat most 30 items; each at least 1 character; each at most 200 charactersEach situation, theme, grammar point or pronunciation point the learner studied since your last save in this chat, one short line each, the situations inside the story included.
storystringnoat least 1 character; at most 1000 charactersThe story as it now stands, replacing the saved one: rewritten from the saved story and this chat when the chat continued it, or the new story when the learner asked to start fresh. Keep only what the story needs to continue: where the learner is and who is with them, what they are after, open threads, the places and situations it has already used, briefly, so it moves on to new ones, and what happens next. Drop whatever no longer matters.
preferencesstringnoat most 1000 charactersHow the learner has asked to be taught from now on, as a short list: the saved preferences with what they asked for in this chat added or changed, replacing them. Only what they asked for; name the language when one holds for a single language. An empty string clears them.

Returns: saved, already_saved, rejected, unmatched, instruction. Empty fields are left out.

Errors

  • An invalid entry in save_material: the rest is saved, and each invalid one comes back in rejected with its problem and a suggestion. A rating or correction that matches nothing saved comes back in unmatched.
  • Invalid arguments: a tool error that names the problem.
  • The daily allowance used up: a tool error of type usage_limit; it resets the next day.
  • No sign-in, or an expired or revoked token: HTTP 401 with a WWW-Authenticate header pointing to the protected-resource metadata.
  • A missing scope: a tool error that asks for the scope.
  • Too many requests: HTTP 429 with Retry-After.

Limits

  • 25 tool calls a day on the free plan, 100 on a paid plan. A typical chat uses three to six.
  • 300 requests a minute per account, counting every MCP message.

Data and support

Konakai keeps only what save_material saves, in the learner’s account. The Privacy Policy says how it’s used and how to delete it. Support: [email protected].