MCP App Store
by KeenEthics

Overview

AI made answers easy. Kuliko helps you stay ready. Connect your Kuliko study library to instantly transform your notes, PDFs, slides, and documents into flashcards, quizzes, summaries, and mind maps that help you truly understand what you're learning—not just memorize it. Built on proven learning science like spaced repetition and active recall, Kuliko helps you prepare with confidence for exams, interviews, presentations, certifications, and the moments that matter most. Whether you're reviewing a single chapter or mastering an entire course, Kuliko adapts to your learning, tracks your progress, and helps you focus on what you need to practice next. Everything stays connected to your Kuliko account, so your subjects, study materials, and progress are always available wherever you learn. - Stay Ready with Kuliko - Generate flashcards, quizzes, summaries, and mind maps from your own notes - Study with spaced repetition and active recall - Build real understanding instead of memorizing answers - Organize every subject in one study library - Prepare for exams, interviews, presentations, and more - Learn with confidence using AI designed for mastery—not shortcuts Finding an answer isn't the same as being ready. Stay Ready.

Tools

add_share_group_member

ChatGPT
Add one member to a share group by email address.

add_share_group_member

ChatGPT
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.

append_to_document

ChatGPT
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.

browse_study_library

ChatGPT
Widget callback: browse saved subjects, documents, or resources in the current learner's library. Filters scope results without changing saved material; has_more indicates another page is available.

choose_study_activity

ChatGPT
Widget callback: choose a saved subject and study activity through supported native forms or the app picker. Selection only prepares navigation; cancelling does not start practice, save answers, or create material.

create_artifact

ChatGPT
Save a self-contained HTML artifact to the user's library, attached to one document. Use this to persist a rich, standalone HTML document (inline CSS/JS — e.g. an interactive explainer, diagram, or visualization) so the user can revisit it as a learning resource. Available to all users.

create_document

ChatGPT
Save model-authored text as a document in a Kuliko subject. Use this for content you (the model) have written — a study guide, a notes file, a generated summary. Pass the raw text in content; the server UTF-8-encodes it and stores it through the same presigned-URL upload store_documents uses. No base64 needed — that's the whole point of this tool versus store_documents. Content is always stored as markdown — write content as markdown. For binary files (PDFs, images) or files the user supplies, use the upload widget (upload_to_subject) / store_documents instead; those keep their original format. Per-file caps (enforced server-side): 5 MB on the free tier, 20 MB on Kuliko Pro. Split anything larger into multiple documents.

create_flashcards

ChatGPT
Create one or more flashcards in a subject. Keep questions clear and self-contained. Answers should be concise but complete. Match the language the user is studying in.

create_notes

ChatGPT
Create one or more Cornell-style notes in a subject. Match the language the user is studying in.

create_quiz

ChatGPT
Create a quiz in a subject. Quiz difficulty uses Glicko-2 ratings (1300=easy, 1500=medium, 1700=hard). Existing quiz questions can be retrieved with get_quiz_questions for rating calibration. Generate 5-15 questions. Match the source language.

create_share_group

ChatGPT
Create a reusable document share group. 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

ChatGPT
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_subject

ChatGPT
Create a new subject (e.g. "Intro to Economics", "OAuth 2.0").

create_summaries

ChatGPT
Create one or more summaries in a subject. Match the language the user is studying in.

delete_html_artifact

ChatGPT
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_learning_resource

ChatGPT
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_resources

ChatGPT
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.

finish_quiz

ChatGPT
Complete a quiz attempt and return the scored results. Called by the quiz widget after the user clicks Submit. 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.

generate_flashcard_image

ChatGPT
Generate an optional visual study aid for one saved flashcard, on request. Use when the user requests a visual aid for a saved card. This consumes Kuliko's image allowance and runs in the background. Resolve the card with list_learning_resources first. Existing images are reused, never replaced. Poll get_job_status every three seconds for a returned job_id; after completion, use get_flashcard_image to retrieve the private image or review_flashcards to display it. Do not automatically retry an uncertain submission. This does not create cards or change their review schedule.

generate_learning_resources

ChatGPT
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. Generation that finishes within a few seconds returns created IDs and a Kuliko consume link. Longer generation, and every quiz, returns 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. 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_resources

ChatGPT
Generate learning resources from an existing document using AI. Returns the generated resources directly. 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.

generate_study_guide

ChatGPT
Generate and save a cited study guide on a chosen topic using Kuliko AI. Use when the user wants a study guide without uploading files or having an existing library. Resolve an existing subject with list_subjects, or create one with create_subject, then pass its subject_id. This submits immediately and uses the document generation allowance. Optional guidance specifies the audience, level, or focus; do not draft the document in chat first. Omitted or empty generate_resources creates only the guide. Include flashcards, notes, or summaries only when requested for practice or review. For quizzes, wait for completion and use generate_learning_resources on the saved source. Omit display_name to use the topic with backend title deduplication. Returns a job_id: poll get_job_status until completion or failure. Never automatically resubmit after an uncertain response or terminal failure. Use open_study_guide_generator instead when it is available and the user wants to configure a widget. Otherwise use this direct tool.

get_document

ChatGPT
Get metadata about a specific document, including title, file size, token count, tags, and timestamps.

get_document_text

ChatGPT
Get the raw extracted text content of an uploaded document. Large documents may return very long text that could fill up the conversation context.

get_flashcard_due_counts

ChatGPT
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_image

ChatGPT
Retrieve a saved flashcard's temporary private image and preview URLs. Use for existing images or after generate_flashcard_image completes. URLs expire after expires_in seconds; call again to refresh. Never construct a public URL from a storage path. A missing image returns an error.

get_flashcard_review_info

ChatGPT
Get info about flashcards scheduled for review, including due counts per subject.

get_job_status

ChatGPT
Check the status of a queued Kuliko background job. Use after a tool returned a job_id — generate_learning_resources, generate_study_guide, submit_study_document_generation, generate_flashcard_image, or an 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_learning_resources

ChatGPT
Get the user's learning resources of a given type.

get_mind_map

ChatGPT
Get the full mind map tree for a document. Returns the hierarchical topic structure with labels, descriptions, and relationships between concepts. Can be rendered as a Mermaid diagram, structured visual hierarchy, or interactive format.

get_mind_map_data

ChatGPT
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_quiz_questions

ChatGPT
Get all questions for a quiz, including their Glicko-2 difficulty ratings, choices, and any existing answers.

get_quiz_results

ChatGPT
Get the full results of a completed quiz attempt, including score, per-question answers, performance analysis, strong areas, and areas to review.

get_quiz_status

ChatGPT
Get the completion status of a specific quiz (new, in_progress, or completed).

get_share_group

ChatGPT
Get one share group, including its members. Member objects include member_user_id, which is required when removing a member from the group.

get_share_group

ChatGPT
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_study_document_preview

ChatGPT
Widget callback: open the selected document's original file with a temporary private URL. Use after the learner opens a saved document; access is checked for the current account and unsupported or unavailable originals produce an explicit error.

get_study_item

ChatGPT
Widget callback: read the selected saved item using its library kind and ID. Authentication remains scoped to the current learner; missing or inaccessible items return a service error.

get_study_progress

ChatGPT
Widget callback: read backend activity statistics and flashcards due for the current learner. Missing practice evidence remains missing; this callback does not manufacture readiness scores or save practice.

get_subscription

ChatGPT
Get the user's current subscription status and tier.

import_study_document

ChatGPT
Widget callback: import an explicitly confirmed file with the learner's selected metadata. Omit lang to follow the source document language. Empty resource selection stores only the document. This callback does not alter the legacy upload tool.

list_documents

ChatGPT
List the user's uploaded documents/sources.

list_html_artifacts

ChatGPT
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_learning_resources

ChatGPT
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_outgoing_shares

ChatGPT
List documents the current user has shared. 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

ChatGPT
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_quiz_attempts

ChatGPT
List all quiz attempts by the user, showing scores and completion status.

list_share_groups

ChatGPT
List reusable document share groups owned by the current user.

list_share_groups

ChatGPT
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_subjects

ChatGPT
List the user's subjects with names and document counts.

open_kuliko_file

ChatGPT
Use to preview a host-owned PDF, text, Markdown, PNG, or JPEG file in Kuliko. Preview alone does not save or upload the file. Import requires the learner to choose a destination subject and explicitly confirm in the app.

open_kuliko_library

ChatGPT
Use to open Kuliko Library for browsing saved subjects, documents, and learning resources. Takes no arguments; opening the library does not create material or start practice. The learner chooses the next activity.

open_study_guide_generator

ChatGPT
Open a widget where the user chooses a subject and generates a cited study guide. Use when the user wants a saved guide from a topic without uploading a file. This opens a form only: it does not generate, save, or consume generation quota. Supplied fields prefill editable controls. The user starts generation with the widget's Generate study guide button. Omitted/empty resources means document only. Omit display_name to use the topic with backend deduplication. Use generate_study_guide to submit directly from the conversation. Pass an existing job_id to resume its progress instead of starting another submission. After submission, the shared creation card tracks the job and links to the saved material in Kuliko.

open_study_session

ChatGPT
Use to open a Study Session beside the conversation. Takes no arguments; the learner selects material before practice starts. Opening this view does not save ratings, submit answers, or create material.

rate_flashcard

ChatGPT
Submit a spaced-repetition rating for a flashcard. Called by the flashcard widget after the user picks Again / Hard / Good / Easy.

read_study_generation_quota

ChatGPT
Widget callback: read the account's current study-guide generation allowance before showing the creation form. Returns document and total-document daily and monthly remaining allowances without creating material.

read_study_settings

ChatGPT
Widget callback: read supported study preferences together with their native settings schema. Opening settings does not persist defaults or change any current learner preferences.

remove_share_group_member

ChatGPT
Remove one member from a share group. Use 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

ChatGPT
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.

review_flashcards

ChatGPT
Start an interactive flashcard review session. Shows due flashcards one at a time with spaced-repetition rating buttons (Again, Hard, Good, Easy). Optionally filter by source or subject.

revoke_share

ChatGPT
Revoke a pending outgoing share. Only pending shares can be revoked. Accepted, declined, revoked, expired, or failed shares remain in outgoing history and cannot be revoked.

revoke_share

ChatGPT
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.

save_flashcards

ChatGPT
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_html_artifact

ChatGPT
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 a new AI-generated source guide use generate_study_guide; to upload a user file use upload_document. Available to all users.

save_notes

ChatGPT
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_summaries

ChatGPT
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.

search_documents

ChatGPT
Search across the user's uploaded documents using semantic search. Returns relevant text passages matching the query.

search_study_mentions

ChatGPT
Widget callback: search the current learner's subjects, documents, and saved resources for composer mentions. Returns authenticated resource references with distinguishing scope. This read-only search does not create or modify study materials.

share_document

ChatGPT
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_source

ChatGPT
Share a document with one user by email or with a share 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.

start_quiz_attempt

ChatGPT
Begin a new attempt on a quiz. Called by the quiz widget when the user clicks Start. Returns the full quiz state with questions ready to answer. If an in-progress attempt already exists, resumes that one instead of creating a duplicate.

store_documents

ChatGPT
Upload one or more documents to a Kuliko subject. Two main use cases: 1. Widget upload — the document-upload widget calls this with the file bytes the user dropped in. You normally don't call this directly for user-supplied files; use upload_to_subject to open the widget. 2. Model-authored content — you've drafted study material (a notes file, a summary, a markdown document) and want to save it as a Kuliko document. Base64-encode the UTF-8 bytes of your text and pass it as a single file with a .md or .txt name.

submit_quiz_answers

ChatGPT
Save the user's quiz answers in bulk. Called by the quiz widget on Save & Exit or when the user submits the quiz — matches the frontend pattern of persisting answers only on save, not on every selection.

submit_study_document_generation

ChatGPT
Widget callback: submit a single generation after the user clicks Generate study guide. Uses the shared backend; never generates independently. Reuse the returned job_id for polling. Never resubmit automatically after a timeout, uncertain response or terminal failure. Omitted/empty resources saves only the document. Use open_study_guide_generator to open the form from a conversation.

take_quiz

ChatGPT
Open a quiz inline. Read-only — 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. Doesn't create or modify anything; the widget calls start_quiz_attempt when the user clicks Start.

update_artifact

ChatGPT
Update an artifact's fields, or move it under a different document.

update_document

ChatGPT
Replace the full text of a markdown or plain-text document. 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. 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_flashcard

ChatGPT
Update a flashcard's question or answer text.

update_html_artifact

ChatGPT
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_mind_map

ChatGPT
Update a mind map's title/tree, or move it under a different document.

update_mind_map

ChatGPT
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_note

ChatGPT
Update a note's fields, or move it under a different document.

update_share_group

ChatGPT
Rename a share 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

ChatGPT
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_study_settings

ChatGPT
Widget callback: save only the study preferences explicitly changed by the learner. Use after the learner submits settings; unrelated preferences are preserved and empty or null changes are rejected.

update_subject

ChatGPT
Rename an existing subject.

update_summary

ChatGPT
Update a summary's fields, or move it under a different document.

upload_document

ChatGPT
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. For a new AI-generated study guide on a topic, use generate_study_guide. 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_bytes

ChatGPT
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. For a new AI-generated study guide on a topic, use generate_study_guide. 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_to_subject

ChatGPT
Open a drag-and-drop upload widget for a Kuliko subject. The widget collects a file from the user and uploads it via the store_documents tool. Call this whenever the user wants to add a new study material (PDF, notes, etc.) to one of their subjects. 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.

view_mind_map

ChatGPT
View a mind map as an interactive visual diagram. Shows the hierarchical structure of topics from a document as a zoomable, pannable graph powered by React Flow.

add_share_group_member

Claude

create_share_group

Claude

create_subject

Claude

create_text_document

Claude

generate_learning_resources

Claude

get_document

Claude

get_document_text

Claude

get_flashcard_due_counts

Claude

get_quiz_questions

Claude

get_quiz_results

Claude

get_quiz_status

Claude

get_share_group

Claude

get_subscription

Claude

list_documents

Claude

list_learning_resources

Claude

list_outgoing_shares

Claude

list_quiz_attempts

Claude

list_share_groups

Claude

list_subjects

Claude

remove_share_group_member

Claude

revoke_share

Claude

save_flashcards

Claude

save_html_artifact

Claude

save_notes

Claude

save_summaries

Claude

search_documents

Claude

share_document

Claude

update_document

Claude

update_flashcard

Claude

update_html_artifact

Claude

update_note

Claude

update_share_group

Claude

update_subject

Claude

update_summary

Claude

upload_document

Claude

upload_document_bytes

Claude

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

App Stats

127

Tools

3

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily