add_share_group_member
ChatGPTAdd one member to a share group by email address.
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_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_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_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_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_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_notes
ChatGPTCreate one or more Cornell-style notes in a subject. 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_subject
ChatGPTCreate a new subject (e.g. "Intro to Economics", "OAuth 2.0").
create_subject
ChatGPTCreate a new subject (e.g. "Intro to Economics", "OAuth 2.0").
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.
create_summaries
ChatGPTCreate one or more summaries in a subject. Match the language the user is studying in.
create_summaries
ChatGPTCreate one or more summaries in a subject. Match the language the user is studying in.
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.
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.
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_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_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_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.
get_document
ChatGPTGet metadata about a specific document, including title, file size, token count, tags, and timestamps.
get_document
ChatGPTGet metadata about a specific document, including title, file size, token count, tags, and timestamps.
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_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_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_review_info
ChatGPTGet info about flashcards scheduled for review, including due counts per subject.
get_flashcard_review_info
ChatGPTGet info about flashcards scheduled for review, including due counts per subject.
get_flashcard_review_info
ChatGPTGet info about flashcards scheduled for review, including due counts per subject.
get_learning_resources
ChatGPTGet the user's learning resources of a given type.
get_learning_resources
ChatGPTGet the user's learning resources of a given type.
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
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
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_quiz_questions
ChatGPTGet all questions for a quiz, including their Glicko-2 difficulty ratings, choices, and any existing answers.
get_quiz_questions
ChatGPTGet all questions for a quiz, including their Glicko-2 difficulty ratings, choices, and any existing answers.
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_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_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_quiz_status
ChatGPTGet the completion status of a specific quiz (new, in_progress, or completed).
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_subscription
ChatGPTGet the user's current subscription status and tier.
get_subscription
ChatGPTGet the user's current subscription status and tier.
get_subscription
ChatGPTGet the user's current subscription status and tier.
list_documents
ChatGPTList the user's uploaded documents/sources.
list_documents
ChatGPTList the user's uploaded documents/sources.
list_documents
ChatGPTList the user's uploaded documents/sources.
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_quiz_attempts
ChatGPTList all quiz attempts by the user, showing scores and completion status.
list_quiz_attempts
ChatGPTList all quiz attempts by the user, showing scores and completion status.
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_subjects
ChatGPTList the user's subjects with names and document counts.
list_subjects
ChatGPTList the user's subjects with names and document counts.
list_subjects
ChatGPTList the user's subjects with names and document counts.
rate_flashcard
ChatGPTSubmit a spaced-repetition rating for a flashcard. Called by the flashcard widget after the user picks Again / Hard / Good / Easy.
rate_flashcard
ChatGPTSubmit a spaced-repetition rating for a flashcard. Called by the flashcard widget after the user picks Again / Hard / Good / Easy.
rate_flashcard
ChatGPTSubmit a spaced-repetition rating for a flashcard. Called by the flashcard widget after the user picks Again / Hard / Good / Easy.
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.
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.
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.
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.
search_documents
ChatGPTSearch across the user's uploaded documents using semantic search. Returns relevant text passages matching the query.
search_documents
ChatGPTSearch across the user's uploaded documents using semantic search. Returns relevant text passages matching the query.
search_documents
ChatGPTSearch across the user's uploaded documents using semantic search. Returns relevant text passages matching the query.
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.
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.
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.
store_documents
ChatGPTUpload user-supplied files to a Kuliko subject (base64 bytes). This is the upload widget's data tool: the widget reads the file the user dropped in, base64-encodes the bytes in the browser, and calls this. You normally don't call it directly — use upload_to_subject to open the widget so the user can pick a file. Don't use this to save text you (the model) wrote — you can't faithfully base64-encode bytes by hand, and binary you generate (e.g. a PDF) lives outside your context. Use create_document for authored content; route real binary files through the widget. 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.
store_documents
ChatGPTUpload user-supplied files to a Kuliko subject (base64 bytes). This is the upload widget's data tool: the widget reads the file the user dropped in, base64-encodes the bytes in the browser, and calls this. You normally don't call it directly — use upload_to_subject to open the widget so the user can pick a file. Don't use this to save text you (the model) wrote — you can't faithfully base64-encode bytes by hand, and binary you generate (e.g. a PDF) lives outside your context. Use create_document for authored content; route real binary files through the widget. 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.
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_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_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.
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.
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.
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_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_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_flashcard
ChatGPTUpdate a flashcard's question or answer text, or move it under a different document.
update_flashcard
ChatGPTUpdate a flashcard's question or answer text, or move it under a different document.
update_mind_map
ChatGPTUpdate a mind map's title/tree, or move it under a different document.
update_note
ChatGPTUpdate a note's fields, or move it under a different document.
update_note
ChatGPTUpdate a note's fields, or move it under a different document.
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_subject
ChatGPTRename an existing subject.
update_subject
ChatGPTRename an existing subject.
update_subject
ChatGPTRename an existing subject.
update_summary
ChatGPTUpdate a summary's fields, or move it under a different document.
update_summary
ChatGPTUpdate a summary's fields, or move it under a different document.
update_summary
ChatGPTUpdate a summary's fields, or move it under a different document.
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.
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.
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.
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.
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.