Kuliko AI
Exam prep from notes and PDFs
- Category
- Education
- Primary Subcategory
- Flashcards & Self-Study Practice
Integration details
Description
Turn your lecture notes, PDFs, slides, and course documents into an active study system with Kuliko AI—right inside your conversation. Create the learning resources you need: - Flashcards for focused memorization - Quizzes and practice questions for exam prep - Clear summaries for fast review - Mind maps that connect key concepts - Cornell-style notes with cues and takeaways Study with active recall and spaced repetition, review the flashcards that are due, take interactive quizzes, search your source material, and focus on the topics that need more practice. Whether you're preparing for an exam, certification, interview, or presentation, Kuliko keeps your subjects, study materials, learning resources, and progress organized in one library. Upload a document or bring the notes already in your conversation, then turn them into a focused study session. Finding an answer isn't the same as being ready. Study with Kuliko and stay ready.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Flashcards & Self-Study Practice
- Secondary Subcategories
- None listed
- Brand
- Kuliko
- Access
- Account required
- First tracked
- 2026-06-25
- Tool count
- 51
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Kuliko AI
Get updates when Kuliko AI’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Flashcards & Self-Study Practice
View Category51 tools agents can invoke
Add one Kuliko user to a reusable share group by email address. Use when the user asks to include a classmate or collaborator in future document shares sent to that group.
add_share_group_member
Append a new block to a markdown or plain-text document. Use when the user asks to add a new section to editable course or lecture notes without rewriting what is already there. Preserves all existing content and adds the supplied text at the end, separated by a blank line when needed. Only documents with a .md, .markdown, or .txt filename are editable. The stored file and semantic search reflect the appended content when this returns. Do not call this tool concurrently for the same document. The current Kuliko API supports full replacement, so this tool performs an internal read then writes the combined content without exposing the existing body to the model.
append_to_document
Create a reusable document share group. Use when the user wants a named, reusable recipient list for sharing study documents with classmates, a study group, or collaborators. Group names must be unique for the current user. Optionally provide initial member email addresses. Sharing to a group later fans out into one pending share row per current group member; users cannot share documents with themselves.
create_share_group
Get or create a study subject or course by name. Use when the user wants a new place to organize course notes, PDFs, and learning resources (for example, "Intro to Economics" or "OAuth 2.0"). This operation is idempotent by case-insensitive name. If the subject already exists, it returns that subject instead of producing a conflict. If ``name`` is omitted, capable MCP clients ask the user for it through a form elicitation. Existing clients can continue to pass ``name`` directly.
create_subject
Save conversation-authored markdown as a new Kuliko document. Use when the model has written a standalone study guide, lesson, course notes, exam-prep outline, or other markdown document that should become source material. Pass raw markdown in `content`; do not base64-encode it. The returned document (including its `id`) is fully stored and indexed when the call returns. A file or existing library is not required. When the user wants help getting started with a chosen topic, author a concise study guide in chat and use this tool when they want it saved. Ask for any missing topic or subject rather than inventing one. If they also requested practice, continue from the confirmed source to resource generation and review. Do not use this to persist structured flashcards, Cornell notes, summaries, or HTML artifacts that are already authored; use the matching `save_*` tool. Do not use it to ask Kuliko AI to derive resources from an existing document; use `generate_learning_resources`. Content is always stored as markdown — write `content` as markdown. For binary files (PDFs, images) or files the user supplies, use the `upload_document` widget / `upload_document_bytes` instead; those keep their original format. Per-file caps: 5 MB on the free tier, 20 MB on Kuliko Pro. Split anything larger into multiple documents. Repeating the same title and content in the same subject returns the existing document. Reusing a title for different content creates a deduplicated title (e.g. `Guide` → `Guide (1)`). When provided, the `subject` object must contain exactly one selector. Use `{"subject_id": "..."}` when the ID came from `list_subjects`; otherwise use `{"subject_name": "Biology"}` to reuse an exact case-insensitive match or create the subject once. If `subject` is omitted, clients supporting form elicitation ask the user for a subject name. Other clients receive `action_required`: ask the user in chat and retry with an explicit `subject`. Nothing is created until the destination is supplied. Do not invent a subject or call `create_subject` first when a name is sufficient.
create_text_document
Permanently delete one stored HTML learning artifact. Use only after the user asks to remove one exact saved interactive explainer, visualization, or diagram. This operation cannot be undone. It always pauses for a fresh interactive confirmation showing the artifact title; clients without form elicitation support receive a link to finish deletion in Kuliko. That handoff does not delete anything.
delete_html_artifact
Permanently delete one stored learning resource. Use only after the user asks to remove one exact flashcard, note, summary, or mind map. This operation cannot be undone. It always pauses for a fresh interactive confirmation showing a meaningful resource label and type; clients without form elicitation support receive a link to finish deletion in Kuliko. That handoff does not delete anything. Use `list_learning_resources` first if the ID is not already known. Quizzes are deliberately unsupported because the Kuliko API does not expose quiz deletion.
delete_learning_resource
Permanently delete multiple stored learning resources of one type. Use only after the user asks to remove several exact same-type flashcards, notes, summaries, or mind maps. This operation cannot be undone. It always pauses for a fresh interactive confirmation showing meaningful labels and the resource type; clients without form elicitation support receive a link to finish deletion in Kuliko. That handoff does not delete anything. Use `list_learning_resources` first to resolve and verify every ID. All IDs must refer to the selected type. Quizzes are deliberately unsupported because the Kuliko API does not expose quiz deletion. The batch API treats missing or unowned IDs as no-ops and does not return an affected-row count, so the result reports the requested IDs and count rather than claiming how many records existed.
delete_learning_resources
Widget callback: complete an attempt and return scored results. This callback is called by the quiz widget after the user clicks Submit. Completing an attempt is irreversible. The widget waits for this call to return and then renders the score, focus areas, and per-question breakdown inline — do not re-render the results as chat text. If the user later asks for their results separately, use `get_quiz_results` instead.
finish_quiz
Turn an existing study document into AI-generated learning resources. Use when the user asks to make flashcards for active recall or memorization, Cornell notes, summaries, a mind map, practice questions, or an exam-prep quiz from uploaded course notes, lecture notes, a PDF, or another existing document. Fast resource types return created IDs and a Kuliko consume link. Quizzes and mind maps return a durable `job_id`; poll `get_job_status` until completion. Generated content is not echoed. If the user explicitly asks to see it in chat, retrieve it with `list_learning_resources` after generation completes. Do not use this when the caller already has complete structured resource content; use `save_flashcards`, `save_notes`, or `save_summaries`. Do not use `create_text_document` as a substitute for a structured resource. Constraints: - For flashcards, notes, summaries, and mind_maps: each source can only have resources generated once per type. If they already exist, this will fail. - For quizzes: cannot generate a new quiz if there is an active (in-progress) quiz for the same source. Complete it first. After enqueueing, poll the returned job instead of calling generation again.
generate_learning_resources
Get metadata for one document, not its extracted body text. Use when the user asks about a stored file's title, size, tags, processing metadata, or timestamps. Returns those fields without the body text. Use `get_document_text` only when the full extracted text is actually needed. `mastery_level` is quiz performance, not overall readiness. When a quiz rating is unavailable it returns "Not quiz verified" instead of a level.
get_document
Get the full extracted text of one document. Use only when the complete body of one source is required, such as before a full-content replacement with `update_document`. For ordinary study questions, prefer `search_documents` because a large PDF or set of lecture notes can fill the conversation context.
get_document_text
Get spaced-repetition flashcard due counts and schedules by subject. Use when the user asks what is due today or how much review work remains, without opening a study session. To actually review due cards, use `review_flashcards`. To retrieve card records, use `list_learning_resources` with `resource_type="flashcards"`.
get_flashcard_due_counts
Check the status of a queued Kuliko background job. Use after a tool returned a `job_id` — `generate_learning_resources`, `create_text_document` with `generate_resources`, or a document upload — to tell the user whether the background work finished. Poll sparingly (every few seconds at most), and stop on a terminal status. Statuses: `queued` and `running` are in progress; `retrying` means a failed attempt will run again automatically; `completed` and `failed` are terminal. Treat any other status as terminal too. Once `completed`, generated resources are available via `list_learning_resources` and processed documents via `list_documents`.
get_job_status
Get the raw hierarchical mind-map tree for analysis or editing. Use when the model needs a saved study mind map's labels, descriptions, branches, or relationships as data for analysis or editing. This does not open the interactive graph; use `view_mind_map` when the user wants to see or explore the map visually.
get_mind_map_data
Get raw question and choice data for one quiz without starting it. Use when the model needs saved practice questions and choices for inspection or reporting without changing quiz progress. To let the user take or resume the quiz interactively, use `take_quiz` instead.
get_quiz_questions
Get report data for the latest completed attempt of one quiz. Use when the user asks how they did on a completed quiz or which topics to review for an exam. Returns score, per-question answers, performance analysis, strong areas, and areas to review. Use `take_quiz` only for the interactive player.
get_quiz_results
Check whether a quiz is new, in progress, or completed. Use when the user asks whether a practice quiz is new, unfinished, or done. This reports state only. Use `take_quiz` when the user wants to open, resume, or view the quiz interactively.
get_quiz_status
Get one share group, including its members. Use when the user wants to inspect one group's name and current members. Member objects include `member_user_id`, which is required when removing a member from the group.
get_share_group
Get the user's current Kuliko plan and subscription status. Use when the user asks which plan they have, whether Kuliko Pro is active, or why an upload quota or file-type limit may apply. This is read-only and does not return upgrade links or purchase instructions.
get_subscription
List stored study documents, optionally filtered by subject or title. Use when the user wants to browse their PDFs, course notes, lecture notes, or other source material, or when another tool needs a document ID. This does not search inside content; use `search_documents` for relevant passages. `mastery_level` is quiz performance, not overall readiness. When a quiz rating is unavailable it returns "Not quiz verified" instead of a level.
list_documents
List stored HTML artifact metadata without returning full HTML bodies. Use this to discover artifact IDs, titles, descriptions, tags, and document associations before updating or deleting an artifact. Results can be restricted to one subject or source/document.
list_html_artifacts
List or search saved flashcards, notes, summaries, mind maps, or quizzes. Use when the user or model needs existing learning resources as raw data, such as finding a quiz ID, reading saved summaries, or inspecting authored flashcards. This never creates resources and never launches an interactive study experience. To create new resources from a document with Kuliko AI, use `generate_learning_resources`. To persist structured content already authored by the model, use the corresponding `save_*` tool. To study interactively, use `review_flashcards`, `take_quiz`, or `view_mind_map`.
list_learning_resources
List documents the current user has shared. Use when the user wants to see who they shared study documents with or whether recipients accepted them. Status meanings: `pending` means the recipient has not responded; `accepted` includes `copied_source_id`; `declined`, `revoked`, and `expired` are terminal states; `failed` includes an `error` describing why the accept-copy job failed.
list_outgoing_shares
List the user's quiz-attempt history with scores and completion status. Use when the user wants a cross-quiz progress report, recent exam-practice history, or IDs and statuses for previous attempts. This does not open a quiz.
list_quiz_attempts
List reusable document share groups owned by the current user. Use when the user wants to browse their saved recipient groups or find a group ID before sharing a document or changing group membership.
list_share_groups
List study subjects or courses with document counts and due-work status. Use when the user wants to browse their Kuliko library by course or topic, find a subject ID for another tool, or see which subjects have study work due. `only_due=true` restricts the list to subjects with review work due; for exact spaced-repetition flashcard counts use `get_flashcard_due_counts`. `mastery_level` is quiz performance, not overall readiness. When a quiz rating is unavailable it returns "Not quiz verified" instead of a level.
list_subjects
Widget callback: submit one spaced-repetition flashcard rating. This callback is called by the flashcard widget after the user picks Again, Hard, Good, or Easy. The rating replaces the card's current review schedule. Do not call it to start or continue a model-driven review; use `review_flashcards` to open the interactive session instead.
rate_flashcard
Remove one member from a share group. Use when the user asks to stop including someone in future shares to the group. Call `get_share_group` to find the member's `member_user_id`. This affects future group shares only; existing share rows remain visible and revocable according to their own status.
remove_share_group_member
Rename an existing study subject or course. Use when the user asks to correct or change a subject's display name. This changes only the name; its documents and learning resources stay attached.
update_subject
Start an interactive session for flashcards currently due for review. Use when the user wants to study, memorize material, practice active recall, or review due cards. Shows flashcards one at a time with spaced-repetition rating buttons (Again, Hard, Good, Easy). Optionally filter by source or subject. Do not use this for due-count reporting; use `get_flashcard_due_counts`. Do not use it to retrieve raw flashcard records; use `list_learning_resources` with `resource_type="flashcards"`.
review_flashcards
Revoke a pending outgoing share. Use when the user asks to cancel one exact pending document share. Only pending shares can be revoked. Accepted, declined, revoked, expired, or failed shares remain in outgoing history and cannot be revoked.
revoke_share
Persist one or more already-authored flashcards. Use when the caller already has final question/answer pairs for active recall, spaced repetition, or memorization. This tool stores the supplied content as-is; it does not ask Kuliko AI to derive cards from the document. For AI generation from source content, use `generate_learning_resources` with `resource_type="flashcards"`. Keep questions clear and self-contained, answers concise but complete, and match the language the user is studying in.
save_flashcards
Persist one or more already-authored Cornell-style notes. Use when the caller already has final Cornell-style course or lecture notes, including the title, memory cues, key points, and summary. This stores supplied content as-is. To ask Kuliko AI to derive notes from a document, use `generate_learning_resources` with `resource_type="notes"`. Match the language the user is studying in.
save_notes
Persist one or more already-authored structured summaries. Use when the caller already has a final study summary, overview, and key points for course notes, lecture notes, or another source. This stores supplied content as-is. To ask Kuliko AI to derive a summary from a document, use `generate_learning_resources` with `resource_type="summaries"`. Match the language the user is studying in.
save_summaries
Persist an already-authored, self-contained HTML artifact. Use for final inline-CSS/JS HTML such as an interactive explainer, visualization, or diagram that the user should revisit as a learning resource. This is not a source document and is not used for semantic search. For markdown source material use `create_text_document`; to upload a user file use `upload_document`. Available to all users.
save_html_artifact
Search inside document content and return relevant text passages. Use when the user asks what their course notes, lecture notes, PDFs, or other study material say about a topic. Results are semantic passages, not a document metadata listing. Use `list_documents` to browse titles or IDs.
search_documents
Share a document with one user by email or with a share group. Use when the user asks to send course notes, a PDF, or another stored study document to a Kuliko user or reusable group. Provide exactly one of `recipient_email` or `group_id`. Group shares fan out into one share row per current group member. Duplicate pending shares for the same document and recipient are skipped, so a duplicate-only group share returns a note instead of an error. Users cannot share documents with themselves. Optional messages are limited to 1000 characters.
share_document
Widget callback: begin or resume the quiz player's attempt. This callback is called when the user clicks Start in an open quiz widget. Do not call it to open a quiz; use `take_quiz` instead. If an in-progress attempt already exists, resumes that one instead of creating a duplicate.
start_quiz_attempt
Widget callback: save the current quiz answers in bulk. This callback is called by an open quiz widget on Save & Exit or Submit. It replaces previously saved selections for the submitted question IDs. Do not call it to open a quiz or inspect questions; use `take_quiz` or `get_quiz_questions` instead.
submit_quiz_answers
Open the interactive quiz player for a specific quiz. Use when the user says "quiz me", wants practice questions for exam prep, or asks to take, resume, or view an existing quiz inline. This read-only entry tool shows whichever state the quiz is in: completed results, an in-progress attempt the user can resume, or a Start button when no attempt exists yet. It doesn't create or modify anything; the widget begins the attempt only after the user clicks Start. Do not use this for raw question data, status checks, or past-result reporting; use `get_quiz_questions`, `get_quiz_status`, or `get_quiz_results` respectively.
take_quiz
Replace the full text of a markdown or plain-text document. Use when the user asks to rewrite or fully replace an editable text or markdown source. Overwrites the document's content in place (the previous text is lost). Only documents with a .md, .markdown, or .txt filename are editable — other types (PDF, DOCX, images, web pages) cannot be edited and will return an error. The update is synchronous: the stored file and semantic search already reflect the new content when this returns. Call get_document_text first to read the current content, then send the complete new body. Partial edits are not supported: whatever you pass fully replaces the document.
update_document
Replace a flashcard's text or move it to another source document. Use when the user asks to correct an existing study card's question or answer. Supplied fields overwrite their current values.
update_flashcard
Replace an HTML artifact's fields or move it to another document. Use when the user asks to revise a saved interactive explainer, visualization, or diagram. Supplied fields overwrite their current values; omitted fields remain unchanged.
update_html_artifact
Replace a mind map's title or tree, or move it to another document. Use when the user asks to revise the structure of an existing study mind map. Supplied fields overwrite their current values; omitted fields remain.
update_mind_map
Replace fields in a saved note or move it to another document. Use when the user asks to correct or reorganize existing Cornell-style study notes. Supplied fields overwrite their current values.
update_note
Rename a share group. Use when the user asks to rename a saved recipient or study group. Group names must be non-empty and unique for the current user. Renaming a group does not change its members or any existing share rows.
update_share_group
Replace fields in a saved summary or move it to another document. Use when the user asks to correct or reorganize an existing study summary. Supplied fields overwrite their current values.
update_summary
Open a drag-and-drop upload widget for a Kuliko subject. Use when the user wants to choose a local PDF, course notes, lecture notes, slides, or another study file and add it to Kuliko for study or exam prep. Free accounts accept PDF and TXT; Kuliko Pro also accepts DOCX, Markdown, PNG, JPEG, and TIFF. The widget handles subject selection, tier-aware file validation, base64 conversion, and upload. Do not use this for text authored in the conversation; use `create_text_document`. If the host already has the exact original file bytes, it may call `upload_document_bytes` directly instead. The widget includes a subject picker pre-loaded with the user's subjects, plus an inline "create new subject" option — so passing `subject_id` is optional. When provided, the picker is pre-filled with that subject and the user can still change it.
upload_document
Upload exact file bytes to a Kuliko subject using base64 transport. Use only when the caller already has the complete original bytes of a PDF, course notes, lecture notes, or another study file and can base64-encode them exactly. Free accounts accept PDF and TXT; Kuliko Pro also accepts DOCX, Markdown, PNG, JPEG, and TIFF. The upload widget also calls this tool after reading the user's local file. Do not invent base64 or use this for prose/markdown authored in the conversation; use `create_text_document`. When the host does not expose original bytes, use `upload_document` so the user can choose the file. Hard caps (per file, enforced server-side): 5 MB on the free tier, 20 MB on Kuliko Pro. Oversized files are rejected with a clear error.
upload_document_bytes
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Kuliko AI alternatives on ChatGPT?
As of 2026-09-28, Kuliko AI competes with Ace Flashcard Maker, Ace Quiz Maker, Bee Spelling, CanQuiz, Drill, Flash, Flashcards Space, Katav, Lurna, NoBrainner, Noteflix, Notit, Quizlet, Read Frog, Recall, SFT Brain, SRS (Spaced Repitation System), TestMaker, Vocabden, Wortschatz, 受験王, 小テストジェネレーター in ChatGPT Flashcards & Self-Study Practice, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.