lessonique.com
An interactive learning platform assisted through WebMCP.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 2 · Act 11 · Transact 0 · Score: Not yet scored
Tool inspector
create_guided_lesson
Create or replace a complete guided lesson transactionally. Always declare lessonMode. Use only the lesson steps and scene beats required for clarity, with at most 15 Learning Plan steps and 15 scene beats. Avoid filler or unnatural compression and group closely related concepts when needed. Use explain when the learner asks to understand, learn, see, or be shown a concept: provide complete example code and progressive explanation beats, not a workspace full of TODOs. When an initial scene teaches source code, preserve Monaco precision by giving each visual explanation beat one semantic target for the exact token, single line, or contiguous multi-line range being discussed, together with the registered highlight, spotlight, focus, or pointer effects that communicate that target. Treat endColumn as the exclusive endpoint after the final target character. Use practice only when the learner asks for an exercise, challenge, TODO, or hands-on work. Use mixed for a demonstration followed by a small validated exercise. Map every coding-exercise beat, including an intermediate exercise, to a lesson step with structural validation criteria and an editor-change interaction wait; Lessonique validates it in the same beat and gates Next or Finish. Use at most 5 final-exercise criteria and write each criterion's learner-visible requirement alongside its validator. Omit supportingItems from the final beat: Lessonique derives the numbered list from those criterion requirements in the same order, so the guide and validation progress cannot diverge. Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, ` `, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation.
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
lessonId |
string | yes | — |
title |
string | yes | — |
objective |
string | yes | — |
lessonMode |
string | yes | Use explain for complete examples and guided demonstrations without TODO-driven work; practice for incomplete exercises and validation; mixed for explanation followed by a small exercise. |
description |
string | no | — |
language |
string | no | — |
replaceExisting |
boolean | no | — |
environment |
object | yes | — |
files |
array | yes | — |
steps |
array | yes | Use only the Learning Plan steps required by the teaching content, up to 15. Prefer clarity over count, avoid filler or unnatural compression, and group closely related concepts when needed. |
initialScene |
object | no | For explain or mixed lessons, prefer a complete multi-beat scene with local navigation and no more than 15 beats. Use only the beats needed for clarity, avoid filler or unnatural compression, and group closely related concepts when necessary. Code explanations should use one semantic target per beat for the exact token, single line, or contiguous multi-line range being discussed and include registered visual effects for that target. Treat endColumn as the exclusive endpoint after the final target character. Do not create artificial learner waits merely to keep explanations visible. Every coding exercise, including an intermediate exercise, must use a mapped lesson step with structural validation criteria and an editor-change interaction wait so Lessonique exposes validation in that same beat. On a final coding exercise, use at most 5 criteria and omit the final beat's guide supportingItems because Lessonique derives the numbered list from each criterion's requirement in matching order. |
Raw JSON schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"lessonId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"objective": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"lessonMode": {
"type": "string",
"enum": [
"explain",
"practice",
"mixed"
],
"description": "Use explain for complete examples and guided demonstrations without TODO-driven work; practice for incomplete exercises and validation; mixed for explanation followed by a small exercise."
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"language": {
"type": "string",
"enum": [
"es",
"en"
]
},
"replaceExisting": {
"type": "boolean",
"const": true
},
"environment": {
"type": "object",
"properties": {
"profileId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"runtimeProviderId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"languageIds": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
}
},
"surfaces": {
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"visible": {
"type": "boolean"
},
"order": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"placementId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"modeId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"size": {
"type": "number",
"exclusiveMinimum": 0
},
"options": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"optionId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"value": {
"type": [
"string",
"number",
"boolean"
]
}
},
"required": [
"optionId",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"activeFile": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"activeSurfaceId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
}
},
"required": [
"profileId"
],
"additionalProperties": false
},
"files": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"languageId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"content": {
"type": "string"
},
"visible": {
"type": "boolean"
},
"readOnly": {
"type": "boolean"
}
},
"required": [
"path",
"languageId",
"content"
],
"additionalProperties": false
}
},
"steps": {
"minItems": 1,
"maxItems": 15,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"objective": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"instructions": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"criteria": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"requirement": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Describe this validation gate in learner-visible language. Final coding-exercise numbered requirements are derived from these values in criterion order."
},
"validatorId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"input": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
},
"required": [
"id",
"requirement",
"validatorId"
],
"additionalProperties": false
}
},
"hints": {
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, `<section>`, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation."
}
}
},
"required": [
"id",
"title",
"objective"
],
"additionalProperties": false
},
"description": "Use only the Learning Plan steps required by the teaching content, up to 15. Prefer clarity over count, avoid filler or unnatural compression, and group closely related concepts when needed."
},
"initialScene": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"cleanupPolicy": {
"type": "string",
"const": "replace"
},
"allowManualNavigation": {
"type": "boolean",
"description": "Set true for progressive explanations so the learner advances locally with Previous, Next, and Finish instead of asking ChatGPT for each micro-step."
},
"beats": {
"minItems": 1,
"maxItems": 15,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"lessonStepId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$",
"description": "Reference the Learning Plan section taught by this micro-step. Reuse the same ID across consecutive beats in one section."
},
"type": {
"type": "string",
"enum": [
"explanation",
"interaction",
"validation",
"feedback"
],
"description": "Use explanation for one small concept, interaction while the learner works, validation while checking declared criteria, and feedback for success or correction."
},
"prepare": {
"type": "object",
"properties": {
"surfaceId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"filePath": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"viewportId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"scroll": {
"type": "string",
"enum": [
"none",
"if-needed"
]
}
},
"additionalProperties": false
},
"target": {
"type": "object",
"properties": {
"resolverId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"input": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
},
"required": [
"resolverId",
"input"
],
"additionalProperties": false
},
"assistant": {
"type": "object",
"properties": {
"stateId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"placementId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"visible": {
"type": "boolean"
}
},
"required": [
"stateId"
],
"additionalProperties": false
},
"effects": {
"maxItems": 8,
"type": "array",
"items": {
"type": "object",
"properties": {
"effectId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"input": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
},
"required": [
"effectId"
],
"additionalProperties": false
}
},
"guide": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, `<section>`, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation."
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Keep this explanation focused on the active micro-step; do not combine multiple concepts into a wall of text. Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, `<section>`, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation."
},
"supportingItems": {
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, `<section>`, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation."
},
"description": "Use for supporting details on explanation beats. Omit this field on the final coding-exercise beat because Lessonique derives its numbered requirements from the mapped criteria."
}
},
"required": [
"body"
],
"additionalProperties": false
},
"caption": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Wrap every code-related term in single backticks, including keywords, identifiers, functions, values, data types, HTML tags, CSS tokens, and short expressions (for example, `const`, `<section>`, `getUser()`, `string`, or `42`). Only inline code spans are supported; do not use HTML or other Markdown for presentation."
},
"wait": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "interaction"
},
"eventTypeId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"target": {
"type": "object",
"properties": {
"resolverId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"input": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
},
"required": [
"resolverId",
"input"
],
"additionalProperties": false
},
"timeoutMs": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 300000
}
},
"required": [
"kind",
"eventTypeId"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "validation"
},
"criterionId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
},
"timeoutMs": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 300000
}
},
"required": [
"kind",
"criterionId"
],
"additionalProperties": false
}
],
"description": "Required for interaction and validation beats. It blocks forward navigation until the registered local condition resolves."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Use only the beats required by the teaching content, up to 15. Prefer clarity over count, avoid filler or unnatural compression, and group closely related concepts when needed."
}
},
"required": [
"id",
"beats"
],
"additionalProperties": false,
"description": "For explain or mixed lessons, prefer a complete multi-beat scene with local navigation and no more than 15 beats. Use only the beats needed for clarity, avoid filler or unnatural compression, and group closely related concepts when necessary. Code explanations should use one semantic target per beat for the exact token, single line, or contiguous multi-line range being discussed and include registered visual effects for that target. Treat endColumn as the exclusive endpoint after the final target character. Do not create artificial learner waits merely to keep explanations visible. Every coding exercise, including an intermediate exercise, must use a mapped lesson step with structural validation criteria and an editor-change interaction wait so Lessonique exposes validation in that same beat. On a final coding exercise, use at most 5 criteria and omit the final beat's guide supportingItems because Lessonique derives the numbered list from each criterion's requirement in matching order."
}
},
"required": [
"lessonId",
"title",
"objective",
"lessonMode",
"environment",
"files",
"steps"
],
"additionalProperties": false,
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
}
Similar websites
pocketgull.app
Pocket Gull is a real-time clinical AI consult engine powered by Google Gemini. Features 10D multi-paradigm strategy, FHIR R4 export & 3D spatial anatomy.
webmcp-six-lac.vercel.app
AI Navigation Layer: Model Context Protocol (MCP) Semantic DOM integration for intelligent, safe, and observable web navigation.
ghqsandbox.net
Interactive math and physics tools an AI agent can drive directly through WebMCP.
app.formative.com
Formative classroom assessment and learning platform