{"ok":true,"site":{"host":"meshful.ai","url":"https://meshful.ai/","type":"live","desc":"Study tools for your AI agent.","tools":[{"name":"get_learning_overview","kind":"answer","impl":"imperative","description":"Read current due totals, active-session facts, bounded deck progress summaries, and recent reviews. This never recommends work or changes the current page.","title":"Get Learning Overview","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"search_library","kind":"answer","impl":"imperative","description":"Search lightweight summaries in the owner-maintained Library. Results never contain cards and this tool never installs, publishes, selects, or opens a deck.","title":"Search Library","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":200},"subjects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"domains":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"levels":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"difficulty_hints":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"evidence_tiers":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"maxItems":50,"uniqueItems":true},"rights_statuses":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"maxItems":50,"uniqueItems":true},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string","minLength":1,"maxLength":64}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"list_my_decks","kind":"answer","impl":"imperative","description":"List personal deck summaries, with optional text/status filters, sorting, and pagination. Call with no arguments to list active decks by due work. Results include revision, progress, provenance, and warnings, not cards; use get_deck for a complete deck. This never changes selection or navigation.","title":"List My Decks","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":200},"status":{"enum":["active","archived","all"]},"sort":{"enum":["due","recent","title","progress"]},"limit":{"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string","minLength":1,"maxLength":64}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"get_deck","kind":"answer","impl":"imperative","description":"Return one complete Library or personal deck, including every card, rubric, prerequisite, provenance field, revision, archive flag, and scheduling summary. The result is never paged or silently truncated.","title":"Get Deck","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"scope":{"enum":["library","personal"]},"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["scope","deck_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"validate_deck","kind":"act","impl":"imperative","description":"Validate a candidate or stored definition deck without writing. Candidate-v2 IDs and prerequisite edges are deck-local. Results separate structural blockers, warnings, and semantic questions for agent review; they do not certify factual or pedagogical quality. For authoring, choose atomic recall terms, write concise definitions and necessary grading criteria, validate the complete payload, repair every blocker, then ingest that exact payload.","title":"Validate Deck","annotations":{"readOnlyHint":true},"inputSchema":{"oneOf":[{"type":"object","properties":{"source":{"const":"stored"},"scope":{"const":"personal"},"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["source","scope","deck_id"],"additionalProperties":false},{"type":"object","properties":{"source":{"const":"candidate"},"operation":{"const":"create"},"deck":{"type":"object","properties":{"schema_version":{"const":"normalized-definition-deck.v2","description":"Use normalized-definition-deck.v2 exactly. The authoring guide version is not a payload field."},"deck_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck identity. Create a new personal deck unless the user explicitly requested replacement; never infer replacement from an ID collision."},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"A concise learner-facing title whose bounded promise the cards fulfill."},"cards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck-local concept ID, not a positional number or a deck-qualified storage ID. Preserve it during repairs."},"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S","description":"Plain-text, unambiguous label for exactly one singular, atomic, retrievable concept or one unitary named theorem, law, method, problem, process, or object. Split true multi-target comparisons, lists, alternatives, paired operations, generic relationships, umbrellas, and bundles. If the content already targets one concept, narrow extraneous objective wording to exactly one replacement front while preserving semantic identity. A visible and/or/versus/vs./slash/comma/ampersand or a generic colon suffix such as role/use/scope/statement is a presumptive defect unless this is a true established proper name with an explicit outside-payload rationale."},"definition":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S","description":"Accurate, concise definition of the front's one concept, stated directly and including distinguishing conditions and notation. A formula alone is not a sufficient definition: accompany it with short prose identifying non-obvious symbols, the relevant domain, quantifiers or conditions, and what the relationship means. State truth-changing theorem hypotheses and comparison inequalities/directions directly; never hide them behind phrases such as 'under the theorem hypotheses.' Put actual mathematical notation in balanced $...$ / $$...$$ TeX rather than raw pseudocode such as integral_a^b, abs(...), or sqrt(...). Do not use circular meta-language such as 'the definition of', 'the idea that', 'the concept of', or 'the question whether' in place of the content. Supports simple Markdown and math; no raw HTML or remote embeds."},"criteria":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"maxItems":12,"minItems":1,"uniqueItems":true,"description":"Minimal observable requirements for the front's one core defining meaning; never use criteria to preserve multiple concepts hidden behind one front. 1–12 allowed, not a quota. A complete equivalent definition or complete alternative characterization must pass without separately reciting another equivalent form, optional examples, consequences, contrasts, error checks, applications, or reference values."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"maxItems":5,"uniqueItems":true,"description":"Optional organizational labels, not criteria or prerequisites; at most 5. Omitted means [] for new cards but preserves existing tags on replacement. Explicit [] clears tags."}},"required":["id","term","definition","criteria"],"additionalProperties":false},"maxItems":50,"minItems":1,"description":"Complete atomic definition cards for this normalized-v2 payload. Each front tests exactly one term or concept; a flagged front must be split, narrowed to the one concept its content already targets, or receive an explicit outside-payload proper-name exception rationale. Coverage determines the count; never merge or omit independently recallable in-scope concepts to stay small. A full-payload call permits 1–50 cards; a larger requested scope uses the course-batch instructions rather than shrinking."},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the prerequisite card in this payload."},"to":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the dependent card in this payload."}},"required":["from","to"],"additionalProperties":false},"maxItems":250,"uniqueItems":true,"description":"Sparse deck-local direct hard prerequisites, from prerequisite to dependent. Usually give a card zero or one direct parent; use two only when both concepts are independently necessary. Treat three or more as a presumptive semantic defect requiring exact justification, but never enforce a maximum parent count or indegree quota: every independently necessary direct parent must survive. Decide directness against the full planned deck before batching; validation does not auto-reduce."}},"required":["schema_version","deck_id","title","cards","edges"],"additionalProperties":false}},"required":["source","operation","deck"],"additionalProperties":false},{"type":"object","properties":{"source":{"const":"candidate"},"operation":{"const":"replace"},"target_deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"expected_deck_revision":{"type":"integer","minimum":1},"deck":{"type":"object","properties":{"schema_version":{"const":"normalized-definition-deck.v2","description":"Use normalized-definition-deck.v2 exactly. The authoring guide version is not a payload field."},"deck_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck identity. Create a new personal deck unless the user explicitly requested replacement; never infer replacement from an ID collision."},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"A concise learner-facing title whose bounded promise the cards fulfill."},"cards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck-local concept ID, not a positional number or a deck-qualified storage ID. Preserve it during repairs."},"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S","description":"Plain-text, unambiguous label for exactly one singular, atomic, retrievable concept or one unitary named theorem, law, method, problem, process, or object. Split true multi-target comparisons, lists, alternatives, paired operations, generic relationships, umbrellas, and bundles. If the content already targets one concept, narrow extraneous objective wording to exactly one replacement front while preserving semantic identity. A visible and/or/versus/vs./slash/comma/ampersand or a generic colon suffix such as role/use/scope/statement is a presumptive defect unless this is a true established proper name with an explicit outside-payload rationale."},"definition":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S","description":"Accurate, concise definition of the front's one concept, stated directly and including distinguishing conditions and notation. A formula alone is not a sufficient definition: accompany it with short prose identifying non-obvious symbols, the relevant domain, quantifiers or conditions, and what the relationship means. State truth-changing theorem hypotheses and comparison inequalities/directions directly; never hide them behind phrases such as 'under the theorem hypotheses.' Put actual mathematical notation in balanced $...$ / $$...$$ TeX rather than raw pseudocode such as integral_a^b, abs(...), or sqrt(...). Do not use circular meta-language such as 'the definition of', 'the idea that', 'the concept of', or 'the question whether' in place of the content. Supports simple Markdown and math; no raw HTML or remote embeds."},"criteria":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"maxItems":12,"minItems":1,"uniqueItems":true,"description":"Minimal observable requirements for the front's one core defining meaning; never use criteria to preserve multiple concepts hidden behind one front. 1–12 allowed, not a quota. A complete equivalent definition or complete alternative characterization must pass without separately reciting another equivalent form, optional examples, consequences, contrasts, error checks, applications, or reference values."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"maxItems":5,"uniqueItems":true,"description":"Optional organizational labels, not criteria or prerequisites; at most 5. Omitted means [] for new cards but preserves existing tags on replacement. Explicit [] clears tags."}},"required":["id","term","definition","criteria"],"additionalProperties":false},"maxItems":50,"minItems":1,"description":"Complete atomic definition cards for this normalized-v2 payload. Each front tests exactly one term or concept; a flagged front must be split, narrowed to the one concept its content already targets, or receive an explicit outside-payload proper-name exception rationale. Coverage determines the count; never merge or omit independently recallable in-scope concepts to stay small. A full-payload call permits 1–50 cards; a larger requested scope uses the course-batch instructions rather than shrinking."},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the prerequisite card in this payload."},"to":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the dependent card in this payload."}},"required":["from","to"],"additionalProperties":false},"maxItems":250,"uniqueItems":true,"description":"Sparse deck-local direct hard prerequisites, from prerequisite to dependent. Usually give a card zero or one direct parent; use two only when both concepts are independently necessary. Treat three or more as a presumptive semantic defect requiring exact justification, but never enforce a maximum parent count or indegree quota: every independently necessary direct parent must survive. Decide directness against the full planned deck before batching; validation does not auto-reduce."}},"required":["schema_version","deck_id","title","cards","edges"],"additionalProperties":false}},"required":["source","operation","target_deck_id","expected_deck_revision","deck"],"additionalProperties":false}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"ingest_deck","kind":"act","impl":"imperative","description":"Atomically create a validated personal definition deck or fully replace one. Replacement archives omitted cards, preserves retained metadata and unchanged learning history, and reports scheduling resets. Use update_deck for metadata and add_cards or update_cards for targeted changes. Retry an uncertain result with identical arguments and key, then verify with stored validate_deck and get_deck. This never navigates.","title":"Ingest Deck","inputSchema":{"oneOf":[{"type":"object","properties":{"operation":{"const":"create"},"deck":{"type":"object","properties":{"schema_version":{"const":"normalized-definition-deck.v2","description":"Use normalized-definition-deck.v2 exactly. The authoring guide version is not a payload field."},"deck_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck identity. Create a new personal deck unless the user explicitly requested replacement; never infer replacement from an ID collision."},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"A concise learner-facing title whose bounded promise the cards fulfill."},"cards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck-local concept ID, not a positional number or a deck-qualified storage ID. Preserve it during repairs."},"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S","description":"Plain-text, unambiguous label for exactly one singular, atomic, retrievable concept or one unitary named theorem, law, method, problem, process, or object. Split true multi-target comparisons, lists, alternatives, paired operations, generic relationships, umbrellas, and bundles. If the content already targets one concept, narrow extraneous objective wording to exactly one replacement front while preserving semantic identity. A visible and/or/versus/vs./slash/comma/ampersand or a generic colon suffix such as role/use/scope/statement is a presumptive defect unless this is a true established proper name with an explicit outside-payload rationale."},"definition":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S","description":"Accurate, concise definition of the front's one concept, stated directly and including distinguishing conditions and notation. A formula alone is not a sufficient definition: accompany it with short prose identifying non-obvious symbols, the relevant domain, quantifiers or conditions, and what the relationship means. State truth-changing theorem hypotheses and comparison inequalities/directions directly; never hide them behind phrases such as 'under the theorem hypotheses.' Put actual mathematical notation in balanced $...$ / $$...$$ TeX rather than raw pseudocode such as integral_a^b, abs(...), or sqrt(...). Do not use circular meta-language such as 'the definition of', 'the idea that', 'the concept of', or 'the question whether' in place of the content. Supports simple Markdown and math; no raw HTML or remote embeds."},"criteria":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"maxItems":12,"minItems":1,"uniqueItems":true,"description":"Minimal observable requirements for the front's one core defining meaning; never use criteria to preserve multiple concepts hidden behind one front. 1–12 allowed, not a quota. A complete equivalent definition or complete alternative characterization must pass without separately reciting another equivalent form, optional examples, consequences, contrasts, error checks, applications, or reference values."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"maxItems":5,"uniqueItems":true,"description":"Optional organizational labels, not criteria or prerequisites; at most 5. Omitted means [] for new cards but preserves existing tags on replacement. Explicit [] clears tags."}},"required":["id","term","definition","criteria"],"additionalProperties":false},"maxItems":50,"minItems":1,"description":"Complete atomic definition cards for this normalized-v2 payload. Each front tests exactly one term or concept; a flagged front must be split, narrowed to the one concept its content already targets, or receive an explicit outside-payload proper-name exception rationale. Coverage determines the count; never merge or omit independently recallable in-scope concepts to stay small. A full-payload call permits 1–50 cards; a larger requested scope uses the course-batch instructions rather than shrinking."},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the prerequisite card in this payload."},"to":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the dependent card in this payload."}},"required":["from","to"],"additionalProperties":false},"maxItems":250,"uniqueItems":true,"description":"Sparse deck-local direct hard prerequisites, from prerequisite to dependent. Usually give a card zero or one direct parent; use two only when both concepts are independently necessary. Treat three or more as a presumptive semantic defect requiring exact justification, but never enforce a maximum parent count or indegree quota: every independently necessary direct parent must survive. Decide directness against the full planned deck before batching; validation does not auto-reduce."}},"required":["schema_version","deck_id","title","cards","edges"],"additionalProperties":false},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["operation","deck","idempotency_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"const":"replace"},"target_deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"expected_deck_revision":{"type":"integer","minimum":1},"deck":{"type":"object","properties":{"schema_version":{"const":"normalized-definition-deck.v2","description":"Use normalized-definition-deck.v2 exactly. The authoring guide version is not a payload field."},"deck_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck identity. Create a new personal deck unless the user explicitly requested replacement; never infer replacement from an ID collision."},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"A concise learner-facing title whose bounded promise the cards fulfill."},"cards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"Stable lowercase deck-local concept ID, not a positional number or a deck-qualified storage ID. Preserve it during repairs."},"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S","description":"Plain-text, unambiguous label for exactly one singular, atomic, retrievable concept or one unitary named theorem, law, method, problem, process, or object. Split true multi-target comparisons, lists, alternatives, paired operations, generic relationships, umbrellas, and bundles. If the content already targets one concept, narrow extraneous objective wording to exactly one replacement front while preserving semantic identity. A visible and/or/versus/vs./slash/comma/ampersand or a generic colon suffix such as role/use/scope/statement is a presumptive defect unless this is a true established proper name with an explicit outside-payload rationale."},"definition":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S","description":"Accurate, concise definition of the front's one concept, stated directly and including distinguishing conditions and notation. A formula alone is not a sufficient definition: accompany it with short prose identifying non-obvious symbols, the relevant domain, quantifiers or conditions, and what the relationship means. State truth-changing theorem hypotheses and comparison inequalities/directions directly; never hide them behind phrases such as 'under the theorem hypotheses.' Put actual mathematical notation in balanced $...$ / $$...$$ TeX rather than raw pseudocode such as integral_a^b, abs(...), or sqrt(...). Do not use circular meta-language such as 'the definition of', 'the idea that', 'the concept of', or 'the question whether' in place of the content. Supports simple Markdown and math; no raw HTML or remote embeds."},"criteria":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"maxItems":12,"minItems":1,"uniqueItems":true,"description":"Minimal observable requirements for the front's one core defining meaning; never use criteria to preserve multiple concepts hidden behind one front. 1–12 allowed, not a quota. A complete equivalent definition or complete alternative characterization must pass without separately reciting another equivalent form, optional examples, consequences, contrasts, error checks, applications, or reference values."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"maxItems":5,"uniqueItems":true,"description":"Optional organizational labels, not criteria or prerequisites; at most 5. Omitted means [] for new cards but preserves existing tags on replacement. Explicit [] clears tags."}},"required":["id","term","definition","criteria"],"additionalProperties":false},"maxItems":50,"minItems":1,"description":"Complete atomic definition cards for this normalized-v2 payload. Each front tests exactly one term or concept; a flagged front must be split, narrowed to the one concept its content already targets, or receive an explicit outside-payload proper-name exception rationale. Coverage determines the count; never merge or omit independently recallable in-scope concepts to stay small. A full-payload call permits 1–50 cards; a larger requested scope uses the course-batch instructions rather than shrinking."},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the prerequisite card in this payload."},"to":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})$","description":"ID of the dependent card in this payload."}},"required":["from","to"],"additionalProperties":false},"maxItems":250,"uniqueItems":true,"description":"Sparse deck-local direct hard prerequisites, from prerequisite to dependent. Usually give a card zero or one direct parent; use two only when both concepts are independently necessary. Treat three or more as a presumptive semantic defect requiring exact justification, but never enforce a maximum parent count or indegree quota: every independently necessary direct parent must survive. Decide directness against the full planned deck before batching; validation does not auto-reduce."}},"required":["schema_version","deck_id","title","cards","edges"],"additionalProperties":false},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["operation","target_deck_id","expected_deck_revision","deck","idempotency_key"],"additionalProperties":false}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"update_deck","kind":"act","impl":"imperative","description":"Atomically patch personal deck metadata using an expected revision and idempotency key. This cannot change cards, deck identity, archive state, scheduling, selection, or navigation.","title":"Update Deck","inputSchema":{"type":"object","properties":{"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"expected_deck_revision":{"type":"integer","minimum":1},"patch":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S"},"description":{"type":"string","maxLength":2000},"subject":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"domain":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"level":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"modules":{"type":"array","items":{"type":"object","properties":{"module_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S"},"description":{"type":"string","maxLength":1000},"position":{"type":"integer","minimum":0,"maximum":10000}},"required":["module_id","title","description","position"],"additionalProperties":false},"maxItems":1000},"provenance":{"type":"object","properties":{"origin":{"type":"string","maxLength":200},"source_outline":{"type":"string","maxLength":8000},"source_records":{"type":"array","items":{"type":"object","properties":{"source_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S"},"uri":{"type":"string","maxLength":2000},"locator":{"type":"string","maxLength":2000},"license":{"type":"string","maxLength":2000}},"required":["source_id","title","uri","locator","license"],"additionalProperties":false},"maxItems":100},"evidence_tier":{"type":"string","minLength":1,"maxLength":200},"rights_status":{"type":"string","minLength":1,"maxLength":200},"notes":{"type":"string","maxLength":8000}},"required":["origin","source_outline","source_records","evidence_tier","rights_status","notes"],"additionalProperties":false}},"required":[],"additionalProperties":false,"minProperties":1},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["deck_id","expected_deck_revision","patch","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"add_cards","kind":"act","impl":"imperative","description":"Atomically add 1 to 100 complete cards to a personal deck. Existing or duplicate identities fail the entire batch; the site initializes scheduling and the tool never changes the current view.","title":"Add Cards","inputSchema":{"type":"object","properties":{"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"expected_deck_revision":{"type":"integer","minimum":1},"cards":{"type":"array","items":{"type":"object","properties":{"card_id":{"type":"string","minLength":3,"maxLength":257,"pattern":"^[a-z0-9](?:[a-z0-9_-]{0,127})\\.[a-z0-9](?:[a-z0-9_.-]{0,127})$"},"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S"},"prompt":{"oneOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"definition_md":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S"},"aliases":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":20,"uniqueItems":true},"required_concepts":{"type":"array","items":{"type":"object","properties":{"rubric_item_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"text":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}},"required":["rubric_item_id","text"],"additionalProperties":false},"maxItems":30},"accepted_variants":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":30,"uniqueItems":true},"major_error_concepts":{"type":"array","items":{"type":"object","properties":{"rubric_item_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"text":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}},"required":["rubric_item_id","text"],"additionalProperties":false},"maxItems":30},"prerequisite_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"maxItems":50,"uniqueItems":true},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"source_refs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":128},"maxItems":50,"uniqueItems":true},"difficulty_hint":{"oneOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"module_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"maxItems":50,"uniqueItems":true},"provenance":{"oneOf":[{"type":"object","properties":{"origin":{"type":"string","maxLength":200},"source_outline":{"type":"string","maxLength":8000},"source_records":{"type":"array","items":{"type":"object","properties":{"source_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S"},"uri":{"type":"string","maxLength":2000},"locator":{"type":"string","maxLength":2000},"license":{"type":"string","maxLength":2000}},"required":["source_id","title","uri","locator","license"],"additionalProperties":false},"maxItems":100},"evidence_tier":{"type":"string","minLength":1,"maxLength":200},"rights_status":{"type":"string","minLength":1,"maxLength":200},"notes":{"type":"string","maxLength":8000}},"required":["origin","source_outline","source_records","evidence_tier","rights_status","notes"],"additionalProperties":false},{"type":"null"}]},"archived":{"type":"boolean"}},"required":["card_id","term","prompt","definition_md","aliases","required_concepts","accepted_variants","major_error_concepts","prerequisite_ids","tags","source_refs","difficulty_hint","module_ids","provenance","archived"],"additionalProperties":false},"maxItems":100,"minItems":1},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["deck_id","expected_deck_revision","cards","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"update_cards","kind":"act","impl":"imperative","description":"Atomically patch 1 to 100 existing cards, including prerequisite fields and reversible archive state. Unknown or duplicate identities fail the entire batch; material grading-target edits reset only affected schedules.","title":"Update Cards","inputSchema":{"type":"object","properties":{"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"expected_deck_revision":{"type":"integer","minimum":1},"updates":{"type":"array","items":{"type":"object","properties":{"card_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"patch":{"type":"object","properties":{"term":{"type":"string","minLength":1,"maxLength":300,"pattern":"\\S"},"prompt":{"oneOf":[{"type":"string","minLength":1,"maxLength":1000},{"type":"null"}]},"definition_md":{"type":"string","minLength":1,"maxLength":8000,"pattern":"\\S"},"aliases":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":20,"uniqueItems":true},"required_concepts":{"type":"array","items":{"type":"object","properties":{"rubric_item_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"text":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}},"required":["rubric_item_id","text"],"additionalProperties":false},"maxItems":30},"accepted_variants":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":30,"uniqueItems":true},"major_error_concepts":{"type":"array","items":{"type":"object","properties":{"rubric_item_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"text":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S"}},"required":["rubric_item_id","text"],"additionalProperties":false},"maxItems":30},"prerequisite_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"maxItems":50,"uniqueItems":true},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":50,"uniqueItems":true},"source_refs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":128},"maxItems":50,"uniqueItems":true},"difficulty_hint":{"oneOf":[{"type":"string","minLength":1,"maxLength":100},{"type":"null"}]},"module_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"maxItems":50,"uniqueItems":true},"provenance":{"oneOf":[{"type":"object","properties":{"origin":{"type":"string","maxLength":200},"source_outline":{"type":"string","maxLength":8000},"source_records":{"type":"array","items":{"type":"object","properties":{"source_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"title":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S"},"uri":{"type":"string","maxLength":2000},"locator":{"type":"string","maxLength":2000},"license":{"type":"string","maxLength":2000}},"required":["source_id","title","uri","locator","license"],"additionalProperties":false},"maxItems":100},"evidence_tier":{"type":"string","minLength":1,"maxLength":200},"rights_status":{"type":"string","minLength":1,"maxLength":200},"notes":{"type":"string","maxLength":8000}},"required":["origin","source_outline","source_records","evidence_tier","rights_status","notes"],"additionalProperties":false},{"type":"null"}]},"archived":{"type":"boolean"}},"required":[],"additionalProperties":false,"minProperties":1}},"required":["card_id","patch"],"additionalProperties":false},"maxItems":100,"minItems":1},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["deck_id","expected_deck_revision","updates","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"start_study_session","kind":"act","impl":"imperative","description":"Start or resume the continuous queue and return the full current card and rubric to the grading agent. Due reviews come first, then eligible new cards, then early practice by nearest due date. For signed-in accounts, this action reuses this client's Study-writer grant or acquires a new one only when none is active. It never replaces an active grant. If this client is superseded or a writer is active elsewhere, stop and ask the learner to choose Continue here in the Study UI, then retry. Ask the learner only for the visible term and keep the definition private until the attempt commits. This never navigates.","title":"Start Study Session","inputSchema":{"type":"object","properties":{"deck_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"limit":{"type":"integer","minimum":1,"maximum":50},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["deck_id","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"get_study_session","kind":"answer","impl":"imperative","description":"Read the current session and full current card and rubric for the grading agent. Keep the definition and rubric private before an attempt. Reveal must commit its Again review before the answer is shown. This lock-free read remains available to a superseded client and neither acquires nor changes the Study-writer grant. It never captures an answer, grades, schedules, advances, or navigates.","title":"Get Study Session","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"session_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"}},"required":["session_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"submit_grade","kind":"transact","impl":"imperative","description":"Atomically submit the learner's exact answer and the agent's grade, evidence, and feedback. Grade meaning and unaided recall, not wording: Again for missing or contradicted essential meaning; Hard for correct but effortful unaided recall; Good for correct normal or unknown effort; Easy only for effortless unaided recall. Do not grade a materially defective card or pre-attempt assistance without an established failure. Cover every required concept. For signed-in accounts, this action reuses this client's Study-writer grant or acquires a new one only when none is active. It never replaces an active grant. If this client is superseded or a writer is active elsewhere, stop and ask the learner to choose Continue here in the Study UI, then retry. The transaction schedules, records, and advances the canonical session exactly once; the site reveals the just-graded definition and keeps it visible until the learner selects Next card. Give the saved specific feedback in chat while that definition is visible. Do not introduce the next term or call get_study_session merely to bypass the learner-controlled transition. Retry uncertain results only with identical arguments and key. This never navigates.","title":"Submit Grade","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$","description":"Copy the current session_id from the live session response; never invent it."},"card_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$","description":"Copy current_card.card_id from this session, not a remembered or next-card identity."},"expected_card_revision":{"type":"integer","minimum":1,"description":"Copy the exact current_card.card_revision used to assess this answer."},"expected_session_revision":{"type":"integer","minimum":1,"description":"Copy the exact session.session_revision for this unanswered card; reread and reconcile conflicts."},"answer_text":{"type":"string","minLength":1,"maxLength":4000,"description":"The learner's exact submitted answer, including whitespace, symbols, errors, and self-corrections. Do not replace it with a summary or canonical definition. If it exceeds the limit, do not silently truncate it."},"answer_origin":{"enum":["chat","website"],"description":"Use chat for the default chat-led attempt; website only when the answer actually came from the website."},"rating":{"enum":["again","hard","good","easy"],"description":"Apply definition-recall.v1: again = failed essential recall; hard = complete unaided but difficult; good = complete with ordinary/unknown effort; easy = complete with positively evidenced effortless unaided recall. Confidence is not fluency."},"rubric_evidence":{"type":"array","items":{"type":"object","properties":{"rubric_item_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$","description":"Copy an ID returned on this current card. Native v2 normally exposes required-1, required-2, etc.; do not assume those IDs for other cards."},"status":{"enum":["met","partial","missed","contradicted"],"description":"met = full semantic support; partial = some required meaning; missed = no support; contradicted = unretracted incompatible claim. For an optional legacy major-error row, contradicted means the named misconception was actually asserted."},"note":{"type":"string","minLength":1,"maxLength":1000,"description":"Briefly identify the answer phrase and its semantic support, omission, or conflict. No invented quotes, timing, assistance, or hidden reasoning transcript."}},"required":["rubric_item_id","status","note"],"additionalProperties":false},"maxItems":40,"uniqueItems":true,"description":"One row for each returned required_concepts ID, with truthful semantic status and answer-grounded note. Use only returned IDs; do not add legacy rubric fields to a v2 card. Explain material recall context in an existing note or feedback."},"feedback":{"type":"string","minLength":1,"maxLength":2000,"description":"Prepare 1–3 chat-ready sentences privately: credit specific correct content and name the decisive gap/correction if present. For a complete answer, briefly confirm its meaning without invented criticism or a routine explanation of unused rating choices. After verifying the matching receipt, deliver this feedback once in chat. Preserve the original feedback on an exact retry."},"misconceptions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":20,"uniqueItems":true,"description":"Plain-language substantial misconceptions actually expressed; [] when none. Missing material, low confidence, or weak card criteria are not learner misconceptions."},"confidence":{"type":"number","minimum":0,"maximum":1,"description":"Your confidence in the semantic assessment, from 0 to 1; not a correctness score, recall-speed measure, or Easy signal. Material assessment uncertainty means stop rather than invent a grade."},"idempotency_key":{"type":"string","minLength":1,"maxLength":128,"description":"A fresh identity for this one logical review. On uncertain delivery, retry exactly the same arguments and key; never create a second review just to obtain a receipt."}},"required":["session_id","card_id","expected_card_revision","expected_session_revision","answer_text","answer_origin","rating","rubric_evidence","feedback","misconceptions","confidence","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]},{"name":"finish_study_session","kind":"act","impl":"imperative","description":"Pause or end an open session early using its expected revision. For signed-in accounts, this action reuses this client's Study-writer grant or acquires a new one only when none is active. It never replaces an active grant. If this client is superseded or a writer is active elsewhere, stop and ask the learner to choose Continue here in the Study UI, then retry. Normal completion follows the final submit_grade. This creates no review and never navigates.","title":"Finish Study Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","minLength":1,"maxLength":257,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$"},"disposition":{"enum":["pause","end"]},"expected_session_revision":{"type":"integer","minimum":1},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["session_id","disposition","expected_session_revision","idempotency_key"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/?demo=empty","pages":["/?demo=empty","/?demo=showcase"]}],"category":"Health & Education","favicon":"/favicons/meshful.ai.png","apiSurface":"spec","toolCount":13}}