add_share_group_member
ChatGPTAdd one member to a share group by email address.
add_share_group_member
ChatGPTAdd 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
ChatGPTAppend 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
ChatGPTWidget 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
ChatGPTWidget 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
ChatGPTSave 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
ChatGPTSave 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
ChatGPTCreate 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
ChatGPTCreate one or more Cornell-style notes in a subject. Match the language the user is studying in.
create_quiz
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate 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
ChatGPTCreate a new subject (e.g. "Intro to Economics", "OAuth 2.0").
create_summaries
ChatGPTCreate one or more summaries in a subject. Match the language the user is studying in.
delete_html_artifact
ChatGPTPermanently 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
ChatGPTPermanently 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
ChatGPTPermanently 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
ChatGPTComplete 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
ChatGPTGenerate 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
ChatGPTTurn 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
ChatGPTGenerate 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
ChatGPTGenerate 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
ChatGPTGet metadata about a specific document, including title, file size, token count, tags, and timestamps.
get_document_text
ChatGPTGet 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
ChatGPTGet 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
ChatGPTRetrieve 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
ChatGPTGet info about flashcards scheduled for review, including due counts per subject.
get_job_status
ChatGPTCheck 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
ChatGPTGet the user's learning resources of a given type.
get_mind_map
ChatGPTGet 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
ChatGPTGet 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
ChatGPTGet all questions for a quiz, including their Glicko-2 difficulty ratings, choices, and any existing answers.
get_quiz_results
ChatGPTGet the full results of a completed quiz attempt, including score, per-question answers, performance analysis, strong areas, and areas to review.
get_quiz_status
ChatGPTGet the completion status of a specific quiz (new, in_progress, or completed).
get_share_group
ChatGPTGet 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
ChatGPTGet 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
ChatGPTWidget 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
ChatGPTWidget 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
ChatGPTWidget 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
ChatGPTGet the user's current subscription status and tier.
import_study_document
ChatGPTWidget 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
ChatGPTList the user's uploaded documents/sources.
list_html_artifacts
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList 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
ChatGPTList all quiz attempts by the user, showing scores and completion status.
list_share_groups
ChatGPTList reusable document share groups owned by the current user.
list_share_groups
ChatGPTList 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
ChatGPTList the user's subjects with names and document counts.
open_kuliko_file
ChatGPTUse 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
ChatGPTUse 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
ChatGPTOpen 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
ChatGPTUse 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
ChatGPTSubmit a spaced-repetition rating for a flashcard. Called by the flashcard widget after the user picks Again / Hard / Good / Easy.
read_study_generation_quota
ChatGPTWidget 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
ChatGPTWidget 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
ChatGPTRemove 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
ChatGPTRemove 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
ChatGPTStart 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
ChatGPTRevoke 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
ChatGPTRevoke 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
ChatGPTPersist 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
ChatGPTPersist 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
ChatGPTPersist 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
ChatGPTPersist 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
ChatGPTSearch across the user's uploaded documents using semantic search. Returns relevant text passages matching the query.
search_study_mentions
ChatGPTWidget 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
ChatGPTShare 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
ChatGPTShare 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
ChatGPTBegin 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
ChatGPTUpload 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
ChatGPTSave 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
ChatGPTWidget 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
ChatGPTOpen 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
ChatGPTUpdate an artifact's fields, or move it under a different document.
update_document
ChatGPTReplace 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
ChatGPTUpdate a flashcard's question or answer text.
update_html_artifact
ChatGPTReplace 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
ChatGPTUpdate a mind map's title/tree, or move it under a different document.
update_mind_map
ChatGPTReplace 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
ChatGPTUpdate a note's fields, or move it under a different document.
update_share_group
ChatGPTRename 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
ChatGPTRename 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
ChatGPTWidget 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
ChatGPTRename an existing subject.
update_summary
ChatGPTUpdate a summary's fields, or move it under a different document.
upload_document
ChatGPTOpen 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
ChatGPTUpload 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
ChatGPTOpen 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
ChatGPTView 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
Claudecreate_share_group
Claudecreate_subject
Claudecreate_text_document
Claudegenerate_learning_resources
Claudeget_document
Claudeget_document_text
Claudeget_flashcard_due_counts
Claudeget_quiz_questions
Claudeget_quiz_results
Claudeget_quiz_status
Claudeget_share_group
Claudeget_subscription
Claudelist_documents
Claudelist_learning_resources
Claudelist_outgoing_shares
Claudelist_quiz_attempts
Claudelist_share_groups
Claudelist_subjects
Clauderemove_share_group_member
Clauderevoke_share
Claudesave_flashcards
Claudesave_html_artifact
Claudesave_notes
Claudesave_summaries
Claudesearch_documents
Claudeshare_document
Claudeupdate_document
Claudeupdate_flashcard
Claudeupdate_html_artifact
Claudeupdate_note
Claudeupdate_share_group
Claudeupdate_subject
Claudeupdate_summary
Claudeupload_document
Claudeupload_document_bytes
Claude