{"ok":true,"site":{"host":"studyloop-webmcp.web.app","url":"https://studyloop-webmcp.web.app/","type":"live","desc":"StudyLoop — a live, adaptive quiz workshop where you and your AI agent study together on one page. Built on WebMCP.","tools":[{"name":"start_session","kind":"act","impl":"imperative","description":"Start a new quiz session on the page. Clears any previous session's cards and summary (the study plan survives). Returns an error if a session is already active — either keep adding to it, or call end_session first. After starting, add cards with add_questions. Example: {\"topic\": \"Causes of World War I\", \"difficulty\": \"medium\", \"target_count\": 10}","title":"Start a study session","inputSchema":{"type":"object","properties":{"topic":{"type":"string","maxLength":120,"description":"What the session is about. Shown in the page header."},"difficulty":{"type":"string","enum":["easy","medium","hard"],"description":"Session-wide default difficulty. Default: medium."},"target_count":{"type":"integer","minimum":1,"maximum":50,"description":"How many questions you plan to reach in total. Default: 10."}},"required":["topic"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_questions","kind":"act","impl":"imperative","description":"Add 1–20 multiple-choice question cards to the page in one call. Cards appear instantly with an animation; the STUDENT answers them by tapping on the page — never answer for them. If no session exists yet, one is auto-started from the first topic_tag. If the previous session has ended, call start_session first. Validation is all-or-nothing: on any error, nothing is added — fix and resend the batch. After the student has answered some cards, call get_session_state and add targeted follow-ups on weak topics. Example: {\"questions\": [{\"prompt\": \"Which two alliances faced each other in 1914?\", \"options\": [\"NATO and the Warsaw Pact\", \"The Triple Entente and the Triple Alliance\"], \"correct_option\": 1, \"topic_tag\": \"alliances\", \"explanation\": \"The Entente (France, Russia, Britain) faced the Triple Alliance (Germany, Austria-Hungary, Italy).\"}]}","title":"Add question cards","inputSchema":{"type":"object","properties":{"questions":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","properties":{"prompt":{"type":"string","maxLength":400,"description":"The question text shown on the card."},"options":{"type":"array","minItems":2,"maxItems":6,"items":{"type":"string","maxLength":200},"description":"2–6 answer choices, shown as buttons A/B/C/…"},"correct_option":{"type":"integer","minimum":0,"description":"0-based index into options of the correct answer."},"topic_tag":{"type":"string","maxLength":60,"description":"Short sub-topic label (e.g. 'alliances'). Drives the per-topic accuracy bars — reuse the same tag for related questions."},"explanation":{"type":"string","maxLength":600,"description":"Optional. Why the correct answer is correct. Revealed only after the student answers, so it cannot spoil."},"difficulty":{"type":"string","enum":["easy","medium","hard"],"description":"Optional. Defaults to the session difficulty."}},"required":["prompt","options","correct_option","topic_tag"]},"description":"The cards to add, in display order."}},"required":["questions"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_session_state","kind":"act","impl":"imperative","description":"Read the full live state of the session — THE feedback tool; call it whenever you need to know how the student is doing (after they've answered a few cards, before deciding follow-ups, when they ask how they're doing). Returns structured JSON: progress {total, answered, correct, accuracy_pct, current_streak, unanswered_ids}; questions[] with each card's result (answered, correct, selected_option, flagged, has_explanation); per_topic accuracy; study_plan; and needs_attention {flagged_question_ids: cards the student marked 'I don't get this' — explain these and consider easier follow-ups; missed_without_explanation_ids: wrong answers you haven't explained yet — call add_explanation for each; weak_topics: below 60% accuracy — add targeted questions with add_questions}. Takes no arguments. When the student asks for help, review, or follow-ups, prefer writing back to the page — add_explanation on missed or flagged cards, add_questions on weak topics — rather than replying only in chat: the page is the shared workspace. Note: reading the state intentionally leaves a visible 'agent checked your progress' line in the page's activity feed (consecutive checks collapse into one line), so this tool is not annotated read-only.","title":"Read the session state","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_explanation","kind":"act","impl":"imperative","description":"Attach (or replace) an explanation on one question card, shown as a note from you. Use it on cards the student missed or flagged — get_session_state's needs_attention lists exactly which. The note is revealed only after the student answers that card (immediately if they already answered, or once the session ends), so it never spoils. Example: {\"question_id\": \"q3\", \"text\": \"Serbia rejected only one clause of the ultimatum — the one allowing Austrian officials to operate on Serbian soil.\"}","title":"Explain a question","inputSchema":{"type":"object","properties":{"question_id":{"type":"string","description":"Card id from get_session_state, e.g. \"q3\"."},"text":{"type":"string","maxLength":600,"description":"The explanation to show the student."}},"required":["question_id","text"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_question","kind":"act","impl":"imperative","description":"Edit fields of an existing question card (typo fixes, clearer wording, difficulty retag). Cards the student already answered are locked except for their explanation — results stay honest; add a fresh card with add_questions instead. Editing content clears the card's flag. Example: {\"question_id\": \"q2\", \"fields\": {\"prompt\": \"Clearer wording of the question?\", \"difficulty\": \"easy\"}}","title":"Edit a question card","inputSchema":{"type":"object","properties":{"question_id":{"type":"string","description":"Card id from get_session_state, e.g. \"q2\"."},"fields":{"type":"object","properties":{"prompt":{"type":"string","maxLength":400,"description":"The question text shown on the card."},"options":{"type":"array","minItems":2,"maxItems":6,"items":{"type":"string","maxLength":200},"description":"2–6 answer choices, shown as buttons A/B/C/…"},"correct_option":{"type":"integer","minimum":0,"description":"0-based index into options of the correct answer."},"explanation":{"type":"string","maxLength":600,"description":"Optional. Why the correct answer is correct. Revealed only after the student answers, so it cannot spoil."},"topic_tag":{"type":"string","maxLength":60,"description":"Short sub-topic label (e.g. 'alliances'). Drives the per-topic accuracy bars — reuse the same tag for related questions."},"difficulty":{"type":"string","enum":["easy","medium","hard"],"description":"Optional. Defaults to the session difficulty."}},"description":"Only the fields you want to change."}},"required":["question_id","fields"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_study_plan","kind":"act","impl":"imperative","description":"Render (or replace) the visible study-plan sidebar — the roadmap you are steering the student through. Set it early, then keep statuses honest as the session progresses: planned → in_progress → done. The plan survives across sessions. Replaces the whole list each call (1–12 topics). Example: {\"topics\": [{\"topic\": \"alliances\", \"status\": \"done\"}, {\"topic\": \"July Crisis\", \"status\": \"in_progress\"}, {\"topic\": \"naval arms race\", \"status\": \"planned\"}]} — bare strings also work: {\"topics\": [\"alliances\", \"July Crisis\"]}","title":"Set the study plan","inputSchema":{"type":"object","properties":{"topics":{"type":"array","minItems":1,"maxItems":12,"items":{"anyOf":[{"type":"string","maxLength":60},{"type":"object","properties":{"topic":{"type":"string","maxLength":60},"status":{"type":"string","enum":["planned","in_progress","done"]}},"required":["topic"]}]},"description":"The full plan, in order. Strings default to status 'planned'."}},"required":["topics"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"end_session","kind":"act","impl":"imperative","description":"End the session and show the student their summary screen. Answering locks; all explanations become visible. Returns the summary to discuss with the student: score, accuracy_pct, per_topic results, weak_topics, flagged_count, best_streak, and suggested_next_steps. Call it when the target count is reached, or when the student asks to stop. Calling it again later returns a freshly recomputed summary. Takes no arguments.","title":"End the session","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Health & Education","favicon":"/favicons/studyloop-webmcp.web.app.svg","apiSurface":"spec","toolCount":7}}