{"generatedAt":"2026-08-14T11:24:05.615Z","id":"ielts-buddy-skills","name":"IELTS Buddy Skills","description":"基于“躺着学”雅思教研团队长期教学与学员服务实践整理，支持 Codex、Claude Code、Cursor、WorkBuddy 等本地 Agent，持续维护中。","installPrompt":"请从 https://github.com/Jobo16/ielts-all-in-one-skills 安装 IELTS Buddy 的“全部雅思学习 Skills”本地 Agent Skill。\n\n优先使用你内置的 Skill 安装能力；如果需要命令，执行：\nnpx skills@latest add Jobo16/ielts-all-in-one-skills --skill '*' --global --yes\n\n必须安装完整的 Skill 目录，不能只复制 SKILL.md。安装完成后列出已安装的 Skill 名称和位置，并告诉我如何在下一轮调用它。\n\n然后根据我的任务选择合适的已安装 Skill，推荐今天的第一个学习动作。","catalog":{"name":"IELTS Buddy 技能商店","version":"2026.07","url":"https://ieltsbuddy.igopx.cn/skills"},"distribution":{"repository":"https://github.com/Jobo16/ielts-all-in-one-skills"},"mcp":{"public":{"auth":"none","tools":["ielts_prep_search","ielts_prep_read_guide"],"transport":"streamable-http","url":"https://ieltsbuddy.igopx.cn/mcp/public"},"user":{"auth":"oauth","transport":"streamable-http","url":"https://ieltsbuddy.igopx.cn/mcp"}},"llms":"https://ieltsbuddy.igopx.cn/llms.txt","skills":[{"id":"ielts-study-plan","name":"学习计划","summary":"根据真实时间和学习证据，制定能完成、能复盘的雅思学习安排。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-study-plan","installSkill":"ielts-study-plan","kind":"skill","webPrompt":{"requiredMaterials":["现在要解决的问题","真实可用时间","已有成绩、错题或学习产物"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-practice","name":"刷题练习","summary":"把你提供的题目变成一组受控练习，先作答，再按真实结果复盘。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-practice","installSkill":"ielts-practice","kind":"skill","webPrompt":{"requiredMaterials":["准备练习的题目","阅读文章或听力材料","复盘时所需的答案"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-writing-review","name":"作文批改","summary":"按 Task 1/2 四项标准评估原文，逐句纠错并给出可学习的高分优化稿。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-writing-review","installSkill":"ielts-writing-review","kind":"skill","webPrompt":{"requiredMaterials":["完整写作题目","完整作文原文","Task 1 的清晰图表或数据"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-speaking-coach","name":"口语陪练","summary":"按 Part 1/2/3 逐题练习，在保留真实经历的前提下改进展开和表达。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-speaking-coach","installSkill":"ielts-speaking-coach","kind":"skill","webPrompt":{"requiredMaterials":["想练的 Part 或话题","英文回答、语音或转写","可选的目标分和题数"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-reading-review","name":"阅读错题复盘","summary":"为每道错题建立原文证据、同义替换桥和干扰项解释。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-reading-review","installSkill":"ielts-reading-review","kind":"skill","webPrompt":{"requiredMaterials":["文章相关段落","题目、选项和作答","正确答案或答案册"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-listening-review","name":"听力错题复盘","summary":"定位失分发生在听辨、理解、干扰还是答案写出环节，并设计短时修复。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-listening-review","installSkill":"ielts-listening-review","kind":"skill","webPrompt":{"requiredMaterials":["题目、作答和正确答案","答案附近听力原文","可选的音频或时间点"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-vocabulary-coach","name":"词汇练习","summary":"用主动回忆、提示、搭配和本轮复测，真正练会少量高价值词块。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-vocabulary-coach","installSkill":"ielts-vocabulary-coach","kind":"skill","webPrompt":{"requiredMaterials":["词表、文章或错题片段","想练的话题或科目","可选的练习数量"],"updatedAt":"2026-07-31","version":"1.0.0"}},{"id":"ielts-mock-review","name":"模考复盘","summary":"先验证成绩是否有效可比，再从题级证据中选择少量高影响修复任务。","url":"https://ieltsbuddy.igopx.cn/skills/ielts-mock-review","installSkill":"ielts-mock-review","kind":"skill","webPrompt":{"requiredMaterials":["各科成绩、正确数和用时","错题、作文或口语材料","中断情况与可比较历史"],"updatedAt":"2026-07-31","version":"1.0.0"}}],"capabilities":[{"actions":[],"category":"学习","description":"集中选择和打开 IELTS Buddy 的拓展功能。","artifacts":[],"external":{"skill":false,"webOnly":true,"mcpTools":[]},"id":"toolbox.index","intents":["打开技能工具箱","选择功能","查看拓展能力"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps","state":["visibleCapabilities","selectedCategory","search"],"stateFields":[{"description":"Visible toolbox capabilities after category and search filtering.","name":"visibleCapabilities","observables":{"snapshot":["visibleCapabilityCount"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected toolbox category.","name":"selectedCategory","observables":{"snapshot":["category"]},"source":"workspace_context"},{"description":"Toolbox search query.","name":"search","observables":{"snapshot":["query"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps","type":"side_panel"}],"tags":["技能工具箱","入口","功能"],"title":"技能工具箱","toolbox":false,"runtimeKind":"workspace"},{"actions":[{"description":"Open a subject course map and expose course progress.","name":"learning.open_subject","sideEffect":"read","verification":"Workspace state exposes selectedSubject and visibleCourses for the opened subject.","workspaceActionNames":["learning_center_open_subject"],"bindings":[{"input":{"fields":[{"description":"Target subject.","name":"subject","required":true,"type":"string","values":["listening","reading","writing","speaking","grammar"]}]},"name":"learning_center_open_subject","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current learning subject or subject tab.","name":"selectedSubject","observables":{"snapshot":["selectedSubject","visibleSubjects"]},"source":"workspace_context"},{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Open a course video, interactive courseware, material, or linked practice task.","name":"learning.open_course_item","sideEffect":"read","verification":"Workspace state exposes activeCourse, activeResourceType, and selected resource ids.","workspaceActionNames":["learning_center_open_course_resource"],"bindings":[{"input":{"fields":[{"description":"Target course id. Uses active course when omitted.","name":"courseId","required":false,"type":"number"},{"description":"Resource type to open.","name":"resourceType","required":false,"type":"string","values":["video","courseware","material","practice"]},{"description":"Material id when opening a material.","name":"materialId","required":false,"type":"number"},{"description":"Practice link id when opening a linked task.","name":"linkId","required":false,"type":"number"},{"description":"Practice part id for locating a linked task.","name":"partId","required":false,"type":"number"}]},"name":"learning_center_open_course_resource","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Refresh the current course state.","name":"learning.refresh_course","sideEffect":"read","verification":"Workspace runtime stateVersion changes and activeCourse/progress are refreshed.","workspaceActionNames":["learning_center_refresh_course"],"bindings":[{"input":{"fields":[{"description":"Course id to refresh. Uses active course when omitted.","name":"courseId","required":false,"type":"number"}]},"name":"learning_center_refresh_course","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"}]}],"category":"学习","description":"按科目查看课程、视频、资料和关联练习。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"learning.center","intents":["安排学习路径","打开课程","查看学习进度"],"openableSurfaces":["side_panel"],"pageType":"learning_center","route":"/learning-center","state":["selectedSubject","selectedCourse","progress","visibleTasks"],"stateFields":[{"description":"Current learning subject or subject tab.","name":"selectedSubject","observables":{"snapshot":["selectedSubject","visibleSubjects"]},"source":"workspace_context"},{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/learning-center","type":"side_panel"}],"tags":["课程","资料","练习"],"title":"雅思全科课","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"List question-bank subjects, source categories, taxonomy groups, tags, difficulty values, and availability counts.","name":"practice.list_taxonomy","sideEffect":"read","verification":"MCP returns active taxonomy groups, tags, and availability counts.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional difficulty filter used to calculate available counts.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Whether availability counts include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Optional question search text used to calculate available counts.","name":"search","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Currently selected tag ids used to calculate dependent availability.","name":"tagIds","required":false,"type":"number[]"},{"description":"User-mentioned question-bank category, material, test set, or other taxonomy terms used to find exact tag ids before searching practice.","name":"tagQueries","required":false,"type":"unknown[]"}]},"name":"ielts_practice_list_taxonomy","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_list_taxonomy"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"}]},{"description":"Search practice parts by skill, tag, difficulty, and query.","name":"practice.search_parts","sideEffect":"read","verification":"Practice list state exposes subject, search/filter state, visiblePartCount, and visible part ids.","workspaceActionNames":["practice_list_set_subject","practice_list_search","practice_list_set_filters_open"],"bindings":[{"input":{"fields":[{"description":"Practice subject.","name":"subject","required":true,"type":"string","values":["listening","reading","speaking","writing"]}]},"name":"practice_list_set_subject","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"practice_list_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the practice filter panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"practice_list_set_filters_open","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Cursor returned by the previous practice.search_parts call.","name":"cursor","required":false,"type":"string"},{"description":"Practice difficulty filter.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Part ids the local Agent has ruled out for this selection.","name":"excludePartIds","required":false,"type":"number[]"},{"description":"Whether to include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Result limit, 1-6.","name":"limit","required":false,"type":"number"},{"description":"Whether the caller explicitly wants unseen parts before previously attempted parts.","name":"preferUnseen","required":false,"type":"boolean"},{"description":"Optional free-text title search.","name":"search","required":false,"type":"string"},{"description":"Catalog order or latest-first order chosen by the caller.","name":"sort","required":false,"type":"string","values":["catalog","latest"]},{"description":"Practice subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Exact taxonomy tag ids resolved by practice.list_taxonomy.","name":"tagIds","required":false,"type":"number[]"}]},"name":"ielts_practice_search_parts","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_search_parts"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current practice subject filter.","name":"subject","observables":{"entityIds":["subject"],"snapshot":["subject"]},"source":"workspace_context"},{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"},{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read one practice part without answers and prepare its start-session input.","name":"practice.read_part","sideEffect":"read","verification":"MCP returns the requested part content with answersIncluded=false and startSessionInput.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum material characters to return.","name":"maxChars","required":false,"type":"number"},{"description":"Practice part id returned by practice.search_parts.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_read_part","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_read_part"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Create a practice session and open the exercise UI.","name":"practice.start_session","sideEffect":"write","verification":"Created session id is returned by MCP or the workspace navigates to /practice/session/:sessionId.","workspaceActionNames":["practice_list_start_session"],"bindings":[{"input":{"fields":[{"description":"Practice part id. Uses first visible part when omitted.","name":"partId","required":false,"type":"number"}]},"name":"practice_list_start_session","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Exact IELTS Buddy practice part id selected by the local Agent.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_start_session","scopes":["practice:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_start_session"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Operate an active practice session.","name":"practice.operate_session","sideEffect":"write","verification":"Practice session state exposes current slot, answeredCount, submitted state, or verified mutation id.","workspaceActionNames":["practice_session_jump_to_question","practice_session_set_answer","practice_session_set_marked","practice_session_set_paused","practice_session_toggle_result_popover","practice_session_set_transcript_open","practice_session_submit"],"bindings":[{"input":{"fields":[{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_jump_to_question","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Answer text to write.","name":"answer","required":true,"type":"string"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_set_answer","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"true marks, false unmarks, omitted toggles.","name":"marked","required":false,"type":"boolean"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_set_marked","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"true pauses, false resumes.","name":"paused","required":true,"type":"boolean"}]},"name":"practice_session_set_paused","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the result popover is open. Defaults to true.","name":"open","required":false,"type":"boolean"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_toggle_result_popover","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the listening transcript panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"practice_session_set_transcript_open","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Must be true when unanswered questions remain.","name":"confirmUnanswered","required":false,"type":"boolean"}]},"name":"practice_session_submit","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_practice_read_session","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Include a bounded snapshot of the completed part's original material when local evidence analysis needs it.","name":"includeMaterial","required":false,"type":"boolean"},{"description":"Maximum combined characters returned for original material.","name":"maxMaterialChars","required":false,"type":"number"},{"description":"Return only incorrect objective items or all graded objective items.","name":"scope","required":false,"type":"string","values":["incorrect","all"]},{"description":"Submitted Reading or Listening practice session id.","name":"sessionId","required":true,"type":"number"},{"description":"Optional exact question slot keys to review.","name":"slotKeys","required":false,"type":"unknown[]"}]},"name":"ielts_practice_read_review","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"},{"auth":"user","destructive":true,"input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"},{"description":"Elapsed duration in seconds.","name":"durationSeconds","required":false,"type":"number"},{"description":"Answer objects with slotKey and answer.","name":"answers","required":false,"type":"record[]","fields":[{"description":"slotKey","name":"slotKey","required":true,"type":"string"},{"description":"answer","name":"answer","required":false,"type":"unknown"}]}]},"name":"ielts_practice_submit_session","scopes":["practice:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_read_session","ielts_practice_read_review","ielts_practice_submit_session"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read the current learner's concrete practice records. Each record exposes a session id for detail or review follow-up.","name":"practice.read_recent_activity","sideEffect":"read","verification":"MCP returns factual practice records with session ids or workspace state exposes the current practice context.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateFrom","required":false,"type":"string"},{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateTo","required":false,"type":"string"},{"description":"Result limit, 1-30.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset returned by the preceding call.","name":"offset","required":false,"type":"number"},{"description":"Optional record type. Empty returns practice and mock records.","name":"sessionType","required":false,"type":"string","values":["","practice","mock"]},{"description":"Optional record status. Empty returns all statuses.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]},{"description":"Optional subject filter. Empty returns every subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing","mock"]},{"description":"Relative record range in the Asia/Shanghai calendar. Ignored when dateFrom or dateTo is supplied.","name":"timeRange","required":false,"type":"string","values":["all","today","yesterday","7d","30d"]}]},"name":"ielts_practice_recent_activity","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_recent_activity"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]}],"category":"练习","description":"听力、阅读、口语、写作 Part 搜索、筛选和开练。","artifacts":[],"external":{"skill":true,"mcpTools":["ielts_practice_search_parts","ielts_practice_list_taxonomy","ielts_practice_read_part","ielts_practice_start_session","ielts_practice_read_session","ielts_practice_read_review","ielts_practice_submit_session","ielts_practice_recent_activity"]},"id":"practice.center","intents":["查找练习","开始练习","继续练习","提交答案"],"openableSurfaces":["side_panel"],"pageType":"practice_list","route":"/practice","state":["subject","filters","visibleParts","activeSession"],"stateFields":[{"description":"Current practice subject filter.","name":"subject","observables":{"entityIds":["subject"],"snapshot":["subject"]},"source":"workspace_context"},{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"},{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"},{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/practice","type":"side_panel"}],"tags":["听力","阅读","写作","口语"],"title":"刷题","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Read and filter the learner's unified activity timeline. Practice and mock activities expose their session id for record-level follow-up.","name":"footprints.list","sideEffect":"read","verification":"MCP returns filtered footprint activities or the browser shows the requested footprints tab.","workspaceActionNames":["footprints_set_tab"],"bindings":[{"input":{"fields":[{"description":"Footprints tab to show.","name":"tab","required":true,"type":"string","values":["activity","assets"]}]},"name":"footprints_set_tab","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Activity kinds to include. Empty includes all kinds.","name":"kinds","required":false,"type":"unknown[]"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Title or description search query.","name":"query","required":false,"type":"string"},{"description":"timeRange","name":"timeRange","required":false,"type":"string","values":["all","today","7d","30d"]}]},"name":"ielts_footprints_list","scopes":["profile:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_footprints_list"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}]},{"description":"Read learner skill profiles and aggregated activity facts. Concrete practice records use their own session-id data contract.","name":"learner.read_profile","sideEffect":"read","verification":"MCP returns learner profiles or the browser shows the learner footprint/profile surface.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional skill filter.","name":"skill","required":false,"type":"string","values":["","writing","speaking","reading","listening"]}]},"name":"ielts_learner_read_profile","scopes":["profile:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_learner_read_profile"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}]}],"category":"学习","description":"读取学习画像和聚合学习活动，用于个性化规划；具体练习记录和逐题复盘由 Agent 按 sessionId 读取。","artifacts":[],"external":{"skill":true,"mcpTools":["ielts_footprints_list","ielts_learner_read_profile"]},"id":"learner.profile","intents":["读取学习画像","查看学习足迹","分析薄弱项"],"openableSurfaces":["side_panel","floating_panel"],"pageType":"footprints","route":"/footprints","state":["summary","recentActivity","visibleActivity","todayActivity","heatmap","filters"],"stateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/footprints","type":"side_panel"},{"agentControl":"recommend_workspace_entry","type":"floating_panel"}],"tags":["画像","薄弱项","进度"],"title":"我的足迹","toolbox":false,"runtimeKind":"workspace"},{"actions":[],"category":"学习","description":"查看 Agent 与用户确认后的学习计划、任务进度、日历安排与验收结果。","artifacts":[],"external":{"skill":true,"mcpTools":[]},"id":"study_plans.manager","intents":["查看学习计划","查看下一项任务","查看计划日历","打开计划任务","查看计划验收"],"openableSurfaces":["side_panel"],"pageType":"plans","route":"/plans","state":["activeTab","focusedMonth","visiblePlans","nextTasks"],"stateFields":[{"description":"Current study plan view.","name":"activeTab","observables":{"snapshot":["activeTab"]},"source":"workspace_context"},{"description":"Calendar month currently in focus.","name":"focusedMonth","observables":{"snapshot":["focusedMonth"]},"source":"workspace_context"},{"description":"Visible study plans and current selection.","name":"visiblePlans","observables":{"entityIds":["selectedPlanId"],"snapshot":["planCount","activePlanCount","completedPlanCount","selectedPlanId"],"visibleIds":true},"source":"workspace_context"},{"description":"The next actionable study plan tasks.","name":"nextTasks","observables":{"entityIds":["selectedTaskId"],"snapshot":["nextTaskCount"],"visibleIds":true},"source":"mcp_result"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/plans","type":"side_panel"}],"tags":["学习计划","任务","日历","验收"],"title":"学习计划","toolbox":false,"runtimeKind":"workspace"},{"actions":[{"description":"List fixed mock papers and free assembly options.","name":"mock.list_papers","sideEffect":"read","verification":"Mock list state exposes activeTab, paperCount, partCount, and current filters.","workspaceActionNames":["mock_list_set_tab","mock_list_search","mock_list_set_section","mock_list_set_difficulty","mock_list_set_filters_open"],"bindings":[{"input":{"fields":[{"description":"Mock center tab.","name":"tab","required":true,"type":"string","values":["papers","compose"]}]},"name":"mock_list_set_tab","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"mock_list_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Mock assembly section.","name":"section","required":true,"type":"string","values":["全部","听力","阅读","写作","口语"]}]},"name":"mock_list_set_section","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Mock assembly difficulty.","name":"difficulty","required":true,"type":"string","values":["全部","基础","核心","冲刺"]}]},"name":"mock_list_set_difficulty","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the mock filter panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"mock_list_set_filters_open","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of available mock papers to return.","name":"limit","required":false,"type":"number"},{"description":"Maximum duration in minutes. Zero disables the duration filter.","name":"maxDurationMinutes","required":false,"type":"number"},{"description":"Optional required subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]}]},"name":"ielts_mock_list_papers","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_mock_list_papers"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Visible fixed mock papers or free assembly parts.","name":"mockPapers","observables":{"snapshot":["activeTab","paperCount","partCount","query","section","difficulty"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected mock paper or custom assembly.","name":"selectedPaper","observables":{"snapshot":["selectedPartCount","startingKey"]},"source":"workspace_context"}]},{"description":"Read recent mock sessions and section-level results for the current learner.","name":"mock.read_recent_activity","sideEffect":"read","verification":"MCP returns recent mock sessions with compact progress and section summaries.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of recent mock sessions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional mock session status filter.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]}]},"name":"ielts_mock_recent_activity","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_mock_recent_activity"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Save a completed mock review summary as a versioned document asset.","name":"mock.save_review_report","sideEffect":"write","verification":"Mock guide state exposes the saved document asset id.","workspaceActionNames":["mock_center_save_review_report"],"bindings":[{"input":{"fields":[]},"name":"mock_center_save_review_report","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Refresh an existing mock review document asset and append a version snapshot.","name":"mock.refresh_review_report","sideEffect":"write","verification":"Mock guide state exposes the same artifactId with a refreshed artifactUpdatedAt snapshot.","workspaceActionNames":["mock_center_refresh_review_report"],"bindings":[{"input":{"fields":[]},"name":"mock_center_refresh_review_report","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]}],"category":"模考","description":"固定模考卷和自由组卷，完成后进入复盘。","artifacts":[{"description":"Completed mock review with score, mistakes, and next practice recommendations.","refreshable":true,"source":"document_asset","title":"Mock Review Report","type":"mock_review_report"}],"external":{"skill":true,"webOnly":true,"mcpTools":["ielts_mock_list_papers","ielts_mock_recent_activity"]},"id":"mock.center","intents":["开始模考","自由组卷","查看复盘"],"openableSurfaces":["side_panel"],"pageType":"mock_list","route":"/mock","state":["mockPapers","selectedPaper","recentReviews"],"stateFields":[{"description":"Visible fixed mock papers or free assembly parts.","name":"mockPapers","observables":{"snapshot":["activeTab","paperCount","partCount","query","section","difficulty"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected mock paper or custom assembly.","name":"selectedPaper","observables":{"snapshot":["selectedPartCount","startingKey"]},"source":"workspace_context"},{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/mock","type":"side_panel"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["组卷","复盘"],"title":"模考","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Search and filter published IELTS knowledge articles.","name":"prep.guides.browse","sideEffect":"read","verification":"Prep guide state exposes the search query, guide count, and selected tag.","workspaceActionNames":["prep_guides_search","prep_guides_set_tag"],"bindings":[{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"prep_guides_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Guide tag.","name":"tag","required":true,"type":"string","values":["全部","雅思备考","考试政策","留学申请","院校专业","留学政策","四六级"]}]},"name":"prep_guides_set_tag","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Submitted prep search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read a published IELTS knowledge article.","name":"prep.guides.read","sideEffect":"read","verification":"Guide content is returned by MCP or workspace state exposes selectedArticleSlug.","workspaceActionNames":["prep_guides_open_article","prep_guides_close_article"],"bindings":[{"input":{"fields":[{"description":"Guide article slug visible in current guide list.","name":"slug","required":true,"type":"string"}]},"name":"prep_guides_open_article","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[]},"name":"prep_guides_close_article","sideEffect":"read","type":"workspace_action"},{"auth":"public","destructive":false,"input":{"fields":[{"description":"Published prep guide slug.","name":"slug","required":true,"type":"string"}]},"name":"ielts_prep_read_guide","scopes":["prep:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_prep_read_guide"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}]}],"category":"学习","description":"检索和阅读备考方法、考试政策、留学申请与院校信息。","artifacts":[{"description":"Reusable knowledge digest created from selected IELTS knowledge articles.","refreshable":true,"source":"document_asset","title":"Prep Digest","type":"prep_digest"}],"external":{"skill":true,"webOnly":true,"mcpTools":["ielts_prep_read_guide"]},"id":"prep.guides","intents":["查雅思知识库","推荐方法文章","阅读考试政策"],"openableSurfaces":["side_panel"],"pageType":"prep_guides","route":"/prep-guides","state":["query","visibleGuides"],"stateFields":[{"description":"Submitted prep search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/prep-guides","type":"side_panel"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["知识库","方法","政策"],"title":"雅思知识库","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Search and filter published prediction-hit records.","name":"prep.prediction_hits.browse","sideEffect":"read","verification":"Prediction-hit state exposes the search query, visible count, topic, and date filters.","workspaceActionNames":["prediction_hits_search","prediction_hits_set_topic","prediction_hits_set_date"],"bindings":[{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"prediction_hits_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Prediction topic type.","name":"topic","required":true,"type":"string","values":["全部","写作命中","阅读命中","听力命中","1","2","3"]}]},"name":"prediction_hits_set_topic","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Prediction date filter. Empty value means 全部日期.","name":"date","required":false,"type":"string"}]},"name":"prediction_hits_set_date","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Submitted prediction-hit search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prediction-hit records and selected filters.","name":"visiblePredictions","observables":{"snapshot":["predictionCount","activePredictionTopicType","activePredictionDate"],"visibleIds":true},"source":"workspace_context"}]}],"category":"学习","description":"查看已经发布的雅思预测命中记录。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"prep.prediction_hits","intents":["查看预测命中","最近考到哪些题"],"openableSurfaces":["side_panel"],"pageType":"prediction_hits","route":"/prediction-hits","state":["query","visiblePredictions"],"stateFields":[{"description":"Submitted prediction-hit search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prediction-hit records and selected filters.","name":"visiblePredictions","observables":{"snapshot":["predictionCount","activePredictionTopicType","activePredictionDate"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/prediction-hits","type":"side_panel"}],"tags":["预测","命中"],"title":"预测命中","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Select the listening transcript part used for dictation.","name":"listening_dictation.select_part","sideEffect":"write","verification":"Workspace state exposes partId and resets the current line to the first segment.","workspaceActionNames":["listening_dictation_select_part"],"bindings":[{"input":{"fields":[{"description":"Listening practice part id.","name":"partId","required":true,"type":"number"}]},"name":"listening_dictation_select_part","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Configure dictation playback speed.","name":"listening_dictation.configure","sideEffect":"write","verification":"Workspace state exposes the playback speed.","workspaceActionNames":["listening_dictation_set_speed"],"bindings":[{"input":{"fields":[{"description":"Playback speed.","name":"speed","required":true,"type":"number","values":["0.75","1","1.25"]}]},"name":"listening_dictation_set_speed","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Jump to a transcript segment by line number.","name":"listening_dictation.go_to_line","sideEffect":"write","verification":"Workspace state exposes currentLineNumber and currentLineId.","workspaceActionNames":["listening_dictation_go_to_line"],"bindings":[{"input":{"fields":[{"description":"Target transcript line number, 1-based.","name":"lineNumber","required":true,"type":"number"}]},"name":"listening_dictation_go_to_line","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Fill one blank on the current dictation line.","name":"listening_dictation.set_answer","sideEffect":"write","verification":"Workspace state exposes currentAnsweredBlanks for the active segment.","workspaceActionNames":["listening_dictation_set_current_answer"],"bindings":[{"input":{"fields":[{"description":"Blank number on the current line, 1-based.","name":"blankIndex","required":true,"type":"number"},{"description":"Answer text for the blank.","name":"value","required":true,"type":"string"}]},"name":"listening_dictation_set_current_answer","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Check the current dictation line and update score/progress.","name":"listening_dictation.check_current_line","sideEffect":"write","verification":"Workspace state exposes currentLineChecked and updated score/progress.","workspaceActionNames":["listening_dictation_check_current_line"],"bindings":[{"input":{"fields":[]},"name":"listening_dictation_check_current_line","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"},{"description":"Checked blank count, correctness, and accuracy.","name":"score","observables":{"snapshot":["accuracy","checkedBlanks","checkedLines","correctBlanks"]},"source":"workspace_context"}]},{"description":"Replay or pause the current transcript segment.","name":"listening_dictation.playback","sideEffect":"read","verification":"Workspace state exposes currentLineId and playing state.","workspaceActionNames":["listening_dictation_replay_current_line","listening_dictation_set_playing"],"bindings":[{"input":{"fields":[]},"name":"listening_dictation_replay_current_line","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"true to play, false to pause.","name":"playing","required":true,"type":"boolean"}]},"name":"listening_dictation_set_playing","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"}]}],"category":"练习","description":"用题库听力原文生成单词挖空训练，按句重听并即时核对。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"listening.dictation","intents":["听力精听","听写练习","重听句子"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps/listening-dictation","state":["partId","currentSegment","answers","score"],"stateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"},{"description":"Checked blank count, correctness, and accuracy.","name":"score","observables":{"snapshot":["accuracy","checkedBlanks","checkedLines","correctBlanks"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps/listening-dictation","type":"side_panel"}],"tags":["精听","听写","题库原文"],"title":"听力精听","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"List the active speaking material library and refresh the visible page state.","name":"speaking_materials.list","sideEffect":"read","verification":"Speaking material state exposes the refreshed material library and current selection.","workspaceActionNames":["speaking_materials_list"],"bindings":[{"input":{"fields":[]},"name":"speaking_materials_list","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[]},"name":"ielts_speaking_materials_list","scopes":["speaking:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_list"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}]},{"description":"Create one speaking material and automatically match questions, expressions, and answer guidance unless exact links are supplied.","name":"speaking_materials.create","sideEffect":"write","verification":"Speaking material state exposes the newly selected material and its question links.","workspaceActionNames":["speaking_materials_create"],"bindings":[{"input":{"fields":[{"description":"Material title.","name":"title","required":true,"type":"string"},{"description":"Core experience, story, or opinion.","name":"coreStory","required":true,"type":"string"},{"description":"Exact speaking question links.","name":"questionLinks","required":false,"type":"record[]"}]},"name":"speaking_materials_create","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"coreStory","name":"coreStory","required":true,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":true,"type":"string"}]},"name":"ielts_speaking_materials_create","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_create"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Update one speaking material; core-content changes automatically refresh its question matches and guidance.","name":"speaking_materials.update","sideEffect":"write","verification":"Speaking material state exposes the updated material and refreshed question links.","workspaceActionNames":["speaking_materials_update"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"id","required":false,"type":"number"},{"description":"Updated material title.","name":"title","required":false,"type":"string"},{"description":"Updated core story.","name":"coreStory","required":false,"type":"string"},{"description":"Replacement speaking question links.","name":"questionLinks","required":false,"type":"record[]"}]},"name":"speaking_materials_update","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"coreStory","name":"coreStory","required":false,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_update","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_update"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Archive one speaking material from the active library.","name":"speaking_materials.archive","sideEffect":"write","verification":"Speaking material state no longer exposes the archived material id.","workspaceActionNames":["speaking_materials_archive"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"id","required":false,"type":"number"}]},"name":"speaking_materials_archive","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":true,"input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_archive","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_archive"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Start a practice session with one exact material and one exact speaking question.","name":"speaking_materials.start_practice","sideEffect":"write","verification":"A targeted speaking practice session is created and opened.","workspaceActionNames":["speaking_materials_start_practice"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"materialId","required":false,"type":"number"},{"description":"Question link id. Uses the first visible question when omitted.","name":"questionLinkId","required":false,"type":"number"}]},"name":"speaking_materials_start_practice","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"materialId","name":"materialId","required":true,"type":"number"},{"description":"questionLinkId","name":"questionLinkId","required":true,"type":"number"}]},"name":"ielts_speaking_materials_start_practice","scopes":["speaking:practice"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_start_practice"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}]}],"category":"练习","description":"保存真实口语素材，由 AI 匹配题库并补充表达和答题提示。","artifacts":[],"external":{"skill":true,"webOnly":false,"mcpTools":["ielts_speaking_materials_list","ielts_speaking_materials_create","ielts_speaking_materials_update","ielts_speaking_materials_archive","ielts_speaking_materials_start_practice"]},"id":"speaking.topic_weaver","intents":["口语素材","积累素材","关联口语题","口语串题","口语练习"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps/speaking-topic-weaver","state":["materials","questionLinks","practiceRuns"],"stateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps/speaking-topic-weaver","type":"side_panel"}],"tags":["素材库","题目关联","串题练习"],"title":"口语素材","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"bindings":[{"auth":"public","destructive":false,"input":{"fields":[{"description":"Result limit, 1-8.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"},{"description":"Keyword, title, test point, or topic.","name":"query","required":false,"type":"string"},{"description":"Required resource type. One call searches guides or prediction hits, never both.","name":"resourceType","required":true,"type":"string","values":["prep_guide","prediction_hit"]},{"description":"Guide tag/category. Only applies to prep_guide.","name":"tag","required":false,"type":"string"},{"description":"IELTS subject filter. Only applies to prediction_hit.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing"]},{"description":"Exam date in YYYY-MM-DD. Only applies to prediction_hit.","name":"testDate","required":false,"type":"string"},{"description":"Exam month in YYYY-MM. Only applies to prediction_hit; use it instead of one call per day.","name":"testMonth","required":false,"type":"string"}]},"name":"ielts_prep_search","scopes":["prep:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Search exactly one IELTS Buddy prep resource type. Use resourceType=prediction_hit for recent exam recalls or prediction hits, and resourceType=prep_guide for articles. For the latest hits, set subject and leave query, testDate, and testMonth empty. Start with the first page; use nextOffset only when more records are needed. Prediction results include the filtered total count.","mcpToolNames":["ielts_prep_search"],"name":"prep.search","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Submitted prep information query returned by MCP.","name":"query","source":"mcp_result"},{"description":"Published prep guides returned by MCP.","name":"visibleGuides","source":"mcp_result"},{"description":"Published prediction-hit records returned by MCP.","name":"visiblePredictions","source":"mcp_result"}]}],"artifacts":[{"description":"Reusable prep guide digest or prediction summary created from selected prep information.","refreshable":true,"source":"document_asset","title":"Prep Digest","type":"prep_digest"}],"description":"Search published IELTS knowledge articles and prediction-hit records as separate structured resource types for Agents and MCP clients.","external":{"mcpTools":["ielts_prep_search"],"skill":true},"id":"prep.info","intents":["搜索雅思知识库","查询预测命中","读取知识文章全文"],"openableSurfaces":[],"state":["query","visibleGuides","visiblePredictions"],"stateFields":[{"description":"Submitted prep information query returned by MCP.","name":"query","source":"mcp_result"},{"description":"Published prep guides returned by MCP.","name":"visibleGuides","source":"mcp_result"},{"description":"Published prediction-hit records returned by MCP.","name":"visiblePredictions","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["指南","预测命中","检索"],"title":"IELTS Knowledge and Prediction Resources","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of resources to return.","name":"limit","required":false,"type":"number"},{"description":"Keywords or a natural-language description of the needed learning resource.","name":"query","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Typed taxonomy values or resource labels that must match.","name":"tags","required":false,"type":"unknown[]"},{"description":"Resource types to search. Empty searches all supported types.","name":"types","required":false,"type":"unknown[]"}]},"name":"ielts_resources_search","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Search across question parts, courses, course sections, prep guides, prediction hits, and the current user's assets. Prep guides and assets use permission-aware hybrid full-text and semantic retrieval.","mcpToolNames":["ielts_resources_search"],"name":"resources.search","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Stable typed handle returned by resources.search or resources.related.","name":"handle","required":true,"type":"string"},{"description":"Maximum text characters to return.","name":"maxChars","required":false,"type":"number"}]},"name":"ielts_resources_read","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read one typed learning resource by the stable handle returned from resources.search. Question answers, explanations, and listening transcripts are excluded.","mcpToolNames":["ielts_resources_read"],"name":"resources.read","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Stable typed resource handle.","name":"handle","required":true,"type":"string"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"Optional relation types to include.","name":"relationTypes","required":false,"type":"unknown[]"}]},"name":"ielts_resources_related","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Find explicitly or structurally related resources, such as course-to-practice and prediction-to-question relationships.","mcpToolNames":["ielts_resources_related"],"name":"resources.related","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"},{"description":"Explicit and structural relations between learning resources.","name":"relations","source":"mcp_result"}]}],"artifacts":[],"description":"Search, read, cite, and traverse IELTS Buddy learning resources through one typed resource protocol.","external":{"mcpTools":["ielts_resources_search","ielts_resources_read","ielts_resources_related"],"skill":true},"id":"resources.library","intents":["搜索学习资源","读取题目或课程资料","查找关联课程和练习"],"openableSurfaces":[],"state":["resources","citations","relations"],"stateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"},{"description":"Explicit and structural relations between learning resources.","name":"relations","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["题库","课程","资料","检索"],"title":"Learning Resource Library","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_read","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read the IELTS full-course learning route as data, grouped by subject and unit, with course-level progress and browser URLs for optional continuation.","mcpToolNames":["ielts_learning_route_read"],"name":"learning_route.read","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_progress","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read course-route progress summaries by subject and unit from course learning progress and linked practice history.","mcpToolNames":["ielts_learning_route_progress"],"name":"learning_route.progress","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Number of next route actions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]},{"description":"Learner's available study time for the next action.","name":"availableMinutes","required":false,"type":"number"}]},"name":"ielts_learning_route_next","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Return the next IELTS course-route actions for the learner, prioritizing in-progress course nodes and then the next unfinished route nodes.","mcpToolNames":["ielts_learning_route_next"],"name":"learning_route.next","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recommended next route actions returned by MCP.","name":"nextActions","source":"mcp_result"}]}],"artifacts":[],"description":"Read the complete IELTS full-course route derived from published courses, units, course progress, and linked practice history so Agents can recommend local next steps without forcing the browser.","external":{"mcpTools":["ielts_learning_route_read","ielts_learning_route_progress","ielts_learning_route_next"],"skill":true},"id":"learning.route","intents":["查看雅思全科路线","查询课程路线进度","推荐下一门课程","按路线安排学习"],"openableSurfaces":[],"state":["route","progress","nextActions"],"stateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recommended next route actions returned by MCP.","name":"nextActions","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["全科课","路线","课程","进度"],"title":"IELTS Learning Route","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Search phrase, meaning, or usage.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_list","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"List and search words in the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_list"],"name":"vocabulary.personal.list","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Portable vocabulary content format.","name":"format","required":false,"type":"string","values":["csv","json"]},{"description":"Maximum entries in this export page.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_export","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Export personal vocabulary content as JSON or CSV for a local Agent or user-owned backup. Review progress is intentionally excluded.","mcpToolNames":["ielts_vocabulary_personal_export"],"name":"vocabulary.personal.export","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum recent/due items to return.","name":"limit","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_progress","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read spaced-repetition progress from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_progress"],"name":"vocabulary.personal.progress","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Avoid words reviewed in the last N days when possible.","name":"excludeRecentlyReviewedDays","required":false,"type":"number"},{"description":"Whether mastered words may be selected.","name":"includeMastered","required":false,"type":"boolean"},{"description":"Optional learning-state filter.","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"Number of local flashcards to prepare.","name":"limit","required":false,"type":"number"},{"description":"Card selection strategy.","name":"mode","required":false,"type":"string","values":["mixed","due","new","weak","random"]},{"description":"Optional phrase, meaning, or usage search filter.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_prepare_cards","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Prepare flashcards from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_prepare_cards"],"name":"vocabulary.personal.prepare_cards","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"},{"description":"Agent-prepared local flashcards selected from personal vocabulary history.","name":"cards","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional source sentence or context.","name":"context","required":false,"type":"string"},{"description":"items","name":"items","required":true,"type":"record[]","fields":[{"description":"Example sentence.","name":"example","required":false,"type":"string"},{"description":"Synonyms, collocations, or related expressions.","name":"expansion","required":false,"type":"unknown[]"},{"description":"Chinese or English meaning.","name":"meaning","required":false,"type":"string"},{"description":"Part of speech.","name":"partOfSpeech","required":false,"type":"string"},{"description":"Word or phrase.","name":"phrase","required":true,"type":"string"},{"description":"Usage note.","name":"usage","required":false,"type":"string"}]},{"description":"Stable source record id when available.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable source title.","name":"sourceTitle","required":false,"type":"string"},{"description":"Origin such as agent, reading_lexicon, practice, or course.","name":"sourceType","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_add","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Add or enrich words in the current user's personal vocabulary book while recording their source.","mcpToolNames":["ielts_vocabulary_personal_add"],"name":"vocabulary.personal.add","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"UTF-8 JSON or CSV text. Import carries vocabulary content only, never review progress.","name":"content","required":true,"type":"string"},{"description":"Format of content.","name":"format","required":true,"type":"string","values":["csv","json"]},{"description":"Stable import id when available; otherwise the service derives one from the content.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable filename or import title.","name":"sourceTitle","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_import","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Import up to 500 personal vocabulary entries from JSON or CSV. Imported entries start with fresh learning progress and keep an import source record.","mcpToolNames":["ielts_vocabulary_personal_import"],"name":"vocabulary.personal.import","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"example","name":"example","required":false,"type":"string"},{"description":"expansion","name":"expansion","required":false,"type":"unknown[]"},{"description":"meaning","name":"meaning","required":false,"type":"string"},{"description":"partOfSpeech","name":"partOfSpeech","required":false,"type":"string"},{"description":"phrase","name":"phrase","required":false,"type":"string"},{"description":"usage","name":"usage","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["new","learning","review","relearning","mastered"]}]},"name":"ielts_vocabulary_personal_update","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update the content or learning state of one personal vocabulary entry.","mcpToolNames":["ielts_vocabulary_personal_update"],"name":"vocabulary.personal.update","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Personal vocabulary item id.","name":"id","required":true,"type":"number"},{"description":"Review rating for spaced repetition.","name":"rating","required":true,"type":"string","values":["again","hard","good"]},{"description":"Optional answer latency in milliseconds.","name":"responseMs","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_record_review","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Record one review result for a personal vocabulary entry and update spaced-repetition progress.","mcpToolNames":["ielts_vocabulary_personal_record_review"],"name":"vocabulary.personal.record_review","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":true,"input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_vocabulary_personal_delete","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Delete one entry from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_delete"],"name":"vocabulary.personal.delete","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"}]}],"artifacts":[],"description":"Manage the authenticated user's cloud-backed personal vocabulary book shared by Agents and learning modules.","external":{"mcpTools":["ielts_vocabulary_personal_list","ielts_vocabulary_personal_export","ielts_vocabulary_personal_progress","ielts_vocabulary_personal_prepare_cards","ielts_vocabulary_personal_add","ielts_vocabulary_personal_import","ielts_vocabulary_personal_update","ielts_vocabulary_personal_record_review","ielts_vocabulary_personal_delete"],"skill":true},"id":"vocabulary.domain","intents":["查询我的词汇","添加单词","导入导出词汇","查询学习状态","删除单词"],"openableSurfaces":[],"state":["items","sources"],"stateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"},{"description":"Agent-prepared local flashcards selected from personal vocabulary history.","name":"cards","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["我的词汇书","单词","同步"],"title":"My Vocabulary Book","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"essay","name":"essay","required":true,"type":"string"},{"description":"prompt","name":"prompt","required":true,"type":"string"},{"description":"targetBand","name":"targetBand","required":false,"type":"number"},{"description":"taskType","name":"taskType","required":true,"type":"string","values":["task1","task2"]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"Required visual facts for Task 1; empty for Task 2.","name":"visualContext","required":false,"type":"string"}]},"name":"ielts_writing_import_submission","scopes":["writing:practice","writing:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Import a local Task 1 or Task 2 prompt and essay into the shared writing practice domain, run teacher-style review, and return the browser result URL.","mcpToolNames":["ielts_writing_import_submission"],"name":"writing.import_submission","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"sessionId","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_writing_read_practice","scopes":["writing:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read immutable versions and structured teacher reviews for a saved writing practice that is not the current visible practice page. Current-page questions, drafts, submissions, and reviews use read_current_practice_context.","mcpToolNames":["ielts_writing_read_practice"],"name":"writing.read_practice","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"answer","name":"answer","required":true,"type":"string"},{"description":"sessionId","name":"sessionId","required":true,"type":"number"},{"description":"slotKey","name":"slotKey","required":true,"type":"string"}]},"name":"ielts_writing_submit_revision","scopes":["writing:practice","writing:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Submit a revised essay as a new immutable version and receive a fresh review with issue resolution evidence.","mcpToolNames":["ielts_writing_submit_revision"],"name":"writing.submit_revision","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]}],"artifacts":[],"description":"Run versioned IELTS writing practice, teacher-style review, and revision across the web and local Agents.","external":{"mcpTools":["ielts_writing_import_submission","ielts_writing_read_practice","ielts_writing_submit_revision"],"skill":true},"id":"writing.practice","intents":["写作做题","批改作文","改写作文","导入本地作文"],"openableSurfaces":[],"state":["practiceSession","versions","reviews"],"stateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["写作","批改","改写","MCP"],"title":"Writing Practice","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"cursor","name":"cursor","required":false,"type":"number"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_learning_pull_events","scopes":["learning:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Pull the authenticated user's authoritative append-only learning events after a cursor for a local mirror or web Agent context.","mcpToolNames":["ielts_learning_pull_events"],"name":"learning.events.pull","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"events","name":"events","required":true,"type":"record[]","fields":[{"description":"deviceId","name":"deviceId","required":true,"type":"string"},{"description":"eventId","name":"eventId","required":true,"type":"string"},{"description":"eventType","name":"eventType","required":true,"type":"string"},{"description":"objectId","name":"objectId","required":false,"type":"string"},{"description":"objectType","name":"objectType","required":false,"type":"string"},{"description":"occurredAt","name":"occurredAt","required":true,"type":"string"},{"description":"payload","name":"payload","required":false,"type":"record"},{"description":"schemaVersion","name":"schemaVersion","required":false,"type":"string","values":["1"]},{"description":"skillCodes","name":"skillCodes","required":false,"type":"unknown[]"},{"description":"subjectCode","name":"subjectCode","required":false,"type":"string","values":["listening","reading","writing","speaking"]}]}]},"name":"ielts_learning_push_events","scopes":["learning:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Idempotently append a batch of Agent-owned learning events to the authenticated user's cloud record.","mcpToolNames":["ielts_learning_push_events"],"name":"learning.events.push","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}]}],"artifacts":[],"description":"Store the authenticated user's authoritative append-only learner events while Agents own planning, mastery, review timing, and next-action decisions.","external":{"mcpTools":["ielts_learning_pull_events","ielts_learning_push_events"],"skill":true},"id":"learning_events.domain","intents":["保存学习记录","同步学习记录","读取云端学习事件"],"openableSurfaces":[],"state":["events","cursor"],"stateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["学习记录","同步","Agent"],"title":"Learning Events","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"includeFinished","name":"includeFinished","required":false,"type":"boolean"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_study_plans_list","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"List the user's study plans with exact ids, revisions, progress, and latest review so an existing plan can be selected.","mcpToolNames":["ielts_study_plans_list"],"name":"study_plans.list","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_get","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read one study plan by an exact id returned by the conversation, workspace context, or plan list, including every task and the latest AI review.","mcpToolNames":["ielts_study_plans_get"],"name":"study_plans.get","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]},"name":"ielts_study_plans_create","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Create a study plan after its purpose and workable schedule are clear, or create a one-time reminder with an explicit time. Ordinary plans need no prior catalog or course lookup; the planner expands the goal into daily tasks. Use separate blocks only for multiple sessions on each day.","mcpToolNames":["ielts_study_plans_create"],"name":"study_plans.create","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"All changes for this user request. Use shorten_plan when reducing the number of study days. Changes are committed atomically.","name":"changes","required":true,"type":"unknown[]"},{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_apply_patch","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update one exact study-plan revision atomically without creating a second plan. Shorten the plan duration, or replace, add, remove, and move tasks. Use one add_task per independent activity, including multiple tasks on the same day.","mcpToolNames":["ielts_study_plans_apply_patch"],"name":"study_plans.apply_patch","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"tasks","name":"tasks","required":true,"type":"record[]","fields":[{"description":"enabled","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"taskId","name":"taskId","required":true,"type":"number"},{"description":"wechatEnabled","name":"wechatEnabled","required":false,"type":"boolean"}]}]},"name":"ielts_study_plans_configure_reminders","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Enable, disable, or change task reminders inside an existing study plan. WeChat delivery remains optional per task.","mcpToolNames":["ielts_study_plans_configure_reminders"],"name":"study_plans.configure_reminders","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"acceptanceCriteria","name":"acceptanceCriteria","required":false,"type":"record[]","fields":[{"description":"id","name":"id","required":true,"type":"string"},{"description":"kind","name":"kind","required":false,"type":"string"},{"description":"label","name":"label","required":true,"type":"string"},{"description":"required","name":"required","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["completed_task_count","completed_task_kind","completion_evidence_count"]}]},{"description":"deadline","name":"deadline","required":false,"type":"string"},{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"goal","name":"goal","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"title","name":"title","required":false,"type":"string"}]},"name":"ielts_study_plans_update","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update a study plan using optimistic revision control.","mcpToolNames":["ielts_study_plans_update"],"name":"study_plans.update","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"Complete replacement plan for this request.","name":"replacement","required":true,"type":"record","fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]}]},"name":"ielts_study_plans_rebuild","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Atomically replace one exact study-plan revision with a complete new plan. A failed replacement leaves the original plan untouched; repeated Agent execution uses the action idempotency key.","mcpToolNames":["ielts_study_plans_rebuild"],"name":"study_plans.rebuild","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":true,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_delete","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Delete a study plan and all tasks that belong to it.","mcpToolNames":["ielts_study_plans_delete"],"name":"study_plans.delete","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Updated description.","name":"description","required":false,"type":"string"},{"description":"Updated due datetime.","name":"dueAt","required":false,"type":"string"},{"description":"Updated expiry datetime.","name":"expiresAt","required":false,"type":"string"},{"description":"Task card id.","name":"id","required":true,"type":"number"},{"description":"Updated priority, 0-100.","name":"priority","required":false,"type":"number"},{"description":"Updated status.","name":"status","required":false,"type":"string","values":["pending","visible","started","completed","dismissed","expired"]},{"description":"Updated title.","name":"title","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_update_task","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update a task that belongs to a study plan, including completion status and due time.","mcpToolNames":["ielts_study_plans_update_task"],"name":"study_plans.update_task","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"planId","name":"planId","required":false,"type":"string"}]},"name":"ielts_study_plans_next_actions","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Return the most useful next tasks across active study plans.","mcpToolNames":["ielts_study_plans_next_actions"],"name":"study_plans.next_actions","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Prioritized next study actions returned by MCP.","name":"nextActions","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_review","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Run AI acceptance review after every task in a study plan is complete.","mcpToolNames":["ielts_study_plans_review"],"name":"study_plans.review","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]}],"artifacts":[],"description":"Create, read, update, delete, prioritize, and review study plans, including time-specific single-task reminders, through the shared backend capability runtime.","external":{"mcpTools":["ielts_study_plans_list","ielts_study_plans_get","ielts_study_plans_create","ielts_study_plans_apply_patch","ielts_study_plans_configure_reminders","ielts_study_plans_update","ielts_study_plans_rebuild","ielts_study_plans_delete","ielts_study_plans_update_task","ielts_study_plans_next_actions","ielts_study_plans_review"],"skill":true},"id":"study_plans.domain","intents":["制定学习计划","查询计划进度","告诉用户下一步","修改计划","验收计划"],"openableSurfaces":[],"state":["plans","tasks","nextActions","latestReview"],"stateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Prioritized next study actions returned by MCP.","name":"nextActions","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["计划","任务","验收","MCP"],"title":"Study Plans","runtimeKind":"remote"}],"remoteCapabilities":[{"actions":[{"bindings":[{"auth":"public","destructive":false,"input":{"fields":[{"description":"Result limit, 1-8.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"},{"description":"Keyword, title, test point, or topic.","name":"query","required":false,"type":"string"},{"description":"Required resource type. One call searches guides or prediction hits, never both.","name":"resourceType","required":true,"type":"string","values":["prep_guide","prediction_hit"]},{"description":"Guide tag/category. Only applies to prep_guide.","name":"tag","required":false,"type":"string"},{"description":"IELTS subject filter. Only applies to prediction_hit.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing"]},{"description":"Exam date in YYYY-MM-DD. Only applies to prediction_hit.","name":"testDate","required":false,"type":"string"},{"description":"Exam month in YYYY-MM. Only applies to prediction_hit; use it instead of one call per day.","name":"testMonth","required":false,"type":"string"}]},"name":"ielts_prep_search","scopes":["prep:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Search exactly one IELTS Buddy prep resource type. Use resourceType=prediction_hit for recent exam recalls or prediction hits, and resourceType=prep_guide for articles. For the latest hits, set subject and leave query, testDate, and testMonth empty. Start with the first page; use nextOffset only when more records are needed. Prediction results include the filtered total count.","mcpToolNames":["ielts_prep_search"],"name":"prep.search","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Submitted prep information query returned by MCP.","name":"query","source":"mcp_result"},{"description":"Published prep guides returned by MCP.","name":"visibleGuides","source":"mcp_result"},{"description":"Published prediction-hit records returned by MCP.","name":"visiblePredictions","source":"mcp_result"}]}],"artifacts":[{"description":"Reusable prep guide digest or prediction summary created from selected prep information.","refreshable":true,"source":"document_asset","title":"Prep Digest","type":"prep_digest"}],"description":"Search published IELTS knowledge articles and prediction-hit records as separate structured resource types for Agents and MCP clients.","external":{"mcpTools":["ielts_prep_search"],"skill":true},"id":"prep.info","intents":["搜索雅思知识库","查询预测命中","读取知识文章全文"],"openableSurfaces":[],"state":["query","visibleGuides","visiblePredictions"],"stateFields":[{"description":"Submitted prep information query returned by MCP.","name":"query","source":"mcp_result"},{"description":"Published prep guides returned by MCP.","name":"visibleGuides","source":"mcp_result"},{"description":"Published prediction-hit records returned by MCP.","name":"visiblePredictions","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["指南","预测命中","检索"],"title":"IELTS Knowledge and Prediction Resources","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of resources to return.","name":"limit","required":false,"type":"number"},{"description":"Keywords or a natural-language description of the needed learning resource.","name":"query","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Typed taxonomy values or resource labels that must match.","name":"tags","required":false,"type":"unknown[]"},{"description":"Resource types to search. Empty searches all supported types.","name":"types","required":false,"type":"unknown[]"}]},"name":"ielts_resources_search","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Search across question parts, courses, course sections, prep guides, prediction hits, and the current user's assets. Prep guides and assets use permission-aware hybrid full-text and semantic retrieval.","mcpToolNames":["ielts_resources_search"],"name":"resources.search","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Stable typed handle returned by resources.search or resources.related.","name":"handle","required":true,"type":"string"},{"description":"Maximum text characters to return.","name":"maxChars","required":false,"type":"number"}]},"name":"ielts_resources_read","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read one typed learning resource by the stable handle returned from resources.search. Question answers, explanations, and listening transcripts are excluded.","mcpToolNames":["ielts_resources_read"],"name":"resources.read","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Stable typed resource handle.","name":"handle","required":true,"type":"string"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"Optional relation types to include.","name":"relationTypes","required":false,"type":"unknown[]"}]},"name":"ielts_resources_related","scopes":["resources:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Find explicitly or structurally related resources, such as course-to-practice and prediction-to-question relationships.","mcpToolNames":["ielts_resources_related"],"name":"resources.related","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"},{"description":"Explicit and structural relations between learning resources.","name":"relations","source":"mcp_result"}]}],"artifacts":[],"description":"Search, read, cite, and traverse IELTS Buddy learning resources through one typed resource protocol.","external":{"mcpTools":["ielts_resources_search","ielts_resources_read","ielts_resources_related"],"skill":true},"id":"resources.library","intents":["搜索学习资源","读取题目或课程资料","查找关联课程和练习"],"openableSurfaces":[],"state":["resources","citations","relations"],"stateFields":[{"description":"Typed learning resources returned by MCP search and read operations.","name":"resources","source":"mcp_result"},{"description":"Stable resource handles, routes, and source citations returned by MCP.","name":"citations","source":"mcp_result"},{"description":"Explicit and structural relations between learning resources.","name":"relations","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["题库","课程","资料","检索"],"title":"Learning Resource Library","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_read","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read the IELTS full-course learning route as data, grouped by subject and unit, with course-level progress and browser URLs for optional continuation.","mcpToolNames":["ielts_learning_route_read"],"name":"learning_route.read","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_progress","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read course-route progress summaries by subject and unit from course learning progress and linked practice history.","mcpToolNames":["ielts_learning_route_progress"],"name":"learning_route.progress","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Number of next route actions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]},{"description":"Learner's available study time for the next action.","name":"availableMinutes","required":false,"type":"number"}]},"name":"ielts_learning_route_next","scopes":["courses:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Return the next IELTS course-route actions for the learner, prioritizing in-progress course nodes and then the next unfinished route nodes.","mcpToolNames":["ielts_learning_route_next"],"name":"learning_route.next","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recommended next route actions returned by MCP.","name":"nextActions","source":"mcp_result"}]}],"artifacts":[],"description":"Read the complete IELTS full-course route derived from published courses, units, course progress, and linked practice history so Agents can recommend local next steps without forcing the browser.","external":{"mcpTools":["ielts_learning_route_read","ielts_learning_route_progress","ielts_learning_route_next"],"skill":true},"id":"learning.route","intents":["查看雅思全科路线","查询课程路线进度","推荐下一门课程","按路线安排学习"],"openableSurfaces":[],"state":["route","progress","nextActions"],"stateFields":[{"description":"Full-course route phases and course nodes returned by MCP.","name":"route","source":"mcp_result"},{"description":"Course-route progress by subject and unit returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recommended next route actions returned by MCP.","name":"nextActions","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["全科课","路线","课程","进度"],"title":"IELTS Learning Route","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Search phrase, meaning, or usage.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_list","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"List and search words in the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_list"],"name":"vocabulary.personal.list","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Portable vocabulary content format.","name":"format","required":false,"type":"string","values":["csv","json"]},{"description":"Maximum entries in this export page.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_export","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Export personal vocabulary content as JSON or CSV for a local Agent or user-owned backup. Review progress is intentionally excluded.","mcpToolNames":["ielts_vocabulary_personal_export"],"name":"vocabulary.personal.export","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum recent/due items to return.","name":"limit","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_progress","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read spaced-repetition progress from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_progress"],"name":"vocabulary.personal.progress","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Avoid words reviewed in the last N days when possible.","name":"excludeRecentlyReviewedDays","required":false,"type":"number"},{"description":"Whether mastered words may be selected.","name":"includeMastered","required":false,"type":"boolean"},{"description":"Optional learning-state filter.","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"Number of local flashcards to prepare.","name":"limit","required":false,"type":"number"},{"description":"Card selection strategy.","name":"mode","required":false,"type":"string","values":["mixed","due","new","weak","random"]},{"description":"Optional phrase, meaning, or usage search filter.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_prepare_cards","scopes":["vocabulary:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Prepare flashcards from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_prepare_cards"],"name":"vocabulary.personal.prepare_cards","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"},{"description":"Agent-prepared local flashcards selected from personal vocabulary history.","name":"cards","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional source sentence or context.","name":"context","required":false,"type":"string"},{"description":"items","name":"items","required":true,"type":"record[]","fields":[{"description":"Example sentence.","name":"example","required":false,"type":"string"},{"description":"Synonyms, collocations, or related expressions.","name":"expansion","required":false,"type":"unknown[]"},{"description":"Chinese or English meaning.","name":"meaning","required":false,"type":"string"},{"description":"Part of speech.","name":"partOfSpeech","required":false,"type":"string"},{"description":"Word or phrase.","name":"phrase","required":true,"type":"string"},{"description":"Usage note.","name":"usage","required":false,"type":"string"}]},{"description":"Stable source record id when available.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable source title.","name":"sourceTitle","required":false,"type":"string"},{"description":"Origin such as agent, reading_lexicon, practice, or course.","name":"sourceType","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_add","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Add or enrich words in the current user's personal vocabulary book while recording their source.","mcpToolNames":["ielts_vocabulary_personal_add"],"name":"vocabulary.personal.add","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"UTF-8 JSON or CSV text. Import carries vocabulary content only, never review progress.","name":"content","required":true,"type":"string"},{"description":"Format of content.","name":"format","required":true,"type":"string","values":["csv","json"]},{"description":"Stable import id when available; otherwise the service derives one from the content.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable filename or import title.","name":"sourceTitle","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_import","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Import up to 500 personal vocabulary entries from JSON or CSV. Imported entries start with fresh learning progress and keep an import source record.","mcpToolNames":["ielts_vocabulary_personal_import"],"name":"vocabulary.personal.import","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"example","name":"example","required":false,"type":"string"},{"description":"expansion","name":"expansion","required":false,"type":"unknown[]"},{"description":"meaning","name":"meaning","required":false,"type":"string"},{"description":"partOfSpeech","name":"partOfSpeech","required":false,"type":"string"},{"description":"phrase","name":"phrase","required":false,"type":"string"},{"description":"usage","name":"usage","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["new","learning","review","relearning","mastered"]}]},"name":"ielts_vocabulary_personal_update","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update the content or learning state of one personal vocabulary entry.","mcpToolNames":["ielts_vocabulary_personal_update"],"name":"vocabulary.personal.update","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Personal vocabulary item id.","name":"id","required":true,"type":"number"},{"description":"Review rating for spaced repetition.","name":"rating","required":true,"type":"string","values":["again","hard","good"]},{"description":"Optional answer latency in milliseconds.","name":"responseMs","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_record_review","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Record one review result for a personal vocabulary entry and update spaced-repetition progress.","mcpToolNames":["ielts_vocabulary_personal_record_review"],"name":"vocabulary.personal.record_review","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":true,"input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_vocabulary_personal_delete","scopes":["vocabulary:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Delete one entry from the current user's personal vocabulary book.","mcpToolNames":["ielts_vocabulary_personal_delete"],"name":"vocabulary.personal.delete","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"}]}],"artifacts":[],"description":"Manage the authenticated user's cloud-backed personal vocabulary book shared by Agents and learning modules.","external":{"mcpTools":["ielts_vocabulary_personal_list","ielts_vocabulary_personal_export","ielts_vocabulary_personal_progress","ielts_vocabulary_personal_prepare_cards","ielts_vocabulary_personal_add","ielts_vocabulary_personal_import","ielts_vocabulary_personal_update","ielts_vocabulary_personal_record_review","ielts_vocabulary_personal_delete"],"skill":true},"id":"vocabulary.domain","intents":["查询我的词汇","添加单词","导入导出词汇","查询学习状态","删除单词"],"openableSurfaces":[],"state":["items","sources"],"stateFields":[{"description":"Cloud-backed personal vocabulary entries returned by MCP.","name":"items","source":"mcp_result"},{"description":"Vocabulary learning-state counts, due words, and learned-history summary returned by MCP.","name":"progress","source":"mcp_result"},{"description":"Recent personal vocabulary review events returned by MCP.","name":"reviewHistory","source":"mcp_result"},{"description":"Agent-prepared local flashcards selected from personal vocabulary history.","name":"cards","source":"mcp_result"},{"description":"Module and Agent provenance attached to vocabulary entries.","name":"sources","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["我的词汇书","单词","同步"],"title":"My Vocabulary Book","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"essay","name":"essay","required":true,"type":"string"},{"description":"prompt","name":"prompt","required":true,"type":"string"},{"description":"targetBand","name":"targetBand","required":false,"type":"number"},{"description":"taskType","name":"taskType","required":true,"type":"string","values":["task1","task2"]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"Required visual facts for Task 1; empty for Task 2.","name":"visualContext","required":false,"type":"string"}]},"name":"ielts_writing_import_submission","scopes":["writing:practice","writing:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Import a local Task 1 or Task 2 prompt and essay into the shared writing practice domain, run teacher-style review, and return the browser result URL.","mcpToolNames":["ielts_writing_import_submission"],"name":"writing.import_submission","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"sessionId","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_writing_read_practice","scopes":["writing:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read immutable versions and structured teacher reviews for a saved writing practice that is not the current visible practice page. Current-page questions, drafts, submissions, and reviews use read_current_practice_context.","mcpToolNames":["ielts_writing_read_practice"],"name":"writing.read_practice","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"answer","name":"answer","required":true,"type":"string"},{"description":"sessionId","name":"sessionId","required":true,"type":"number"},{"description":"slotKey","name":"slotKey","required":true,"type":"string"}]},"name":"ielts_writing_submit_revision","scopes":["writing:practice","writing:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Submit a revised essay as a new immutable version and receive a fresh review with issue resolution evidence.","mcpToolNames":["ielts_writing_submit_revision"],"name":"writing.submit_revision","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}]}],"artifacts":[],"description":"Run versioned IELTS writing practice, teacher-style review, and revision across the web and local Agents.","external":{"mcpTools":["ielts_writing_import_submission","ielts_writing_read_practice","ielts_writing_submit_revision"],"skill":true},"id":"writing.practice","intents":["写作做题","批改作文","改写作文","导入本地作文"],"openableSurfaces":[],"state":["practiceSession","versions","reviews"],"stateFields":[{"description":"Shared writing practice session and browser route returned by MCP.","name":"practiceSession","source":"mcp_result"},{"description":"Immutable essay versions and their structured reviews.","name":"versions","source":"mcp_result"},{"description":"Criterion evidence, anchored issues, and revision priorities.","name":"reviews","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["写作","批改","改写","MCP"],"title":"Writing Practice","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"cursor","name":"cursor","required":false,"type":"number"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_learning_pull_events","scopes":["learning:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Pull the authenticated user's authoritative append-only learning events after a cursor for a local mirror or web Agent context.","mcpToolNames":["ielts_learning_pull_events"],"name":"learning.events.pull","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"events","name":"events","required":true,"type":"record[]","fields":[{"description":"deviceId","name":"deviceId","required":true,"type":"string"},{"description":"eventId","name":"eventId","required":true,"type":"string"},{"description":"eventType","name":"eventType","required":true,"type":"string"},{"description":"objectId","name":"objectId","required":false,"type":"string"},{"description":"objectType","name":"objectType","required":false,"type":"string"},{"description":"occurredAt","name":"occurredAt","required":true,"type":"string"},{"description":"payload","name":"payload","required":false,"type":"record"},{"description":"schemaVersion","name":"schemaVersion","required":false,"type":"string","values":["1"]},{"description":"skillCodes","name":"skillCodes","required":false,"type":"unknown[]"},{"description":"subjectCode","name":"subjectCode","required":false,"type":"string","values":["listening","reading","writing","speaking"]}]}]},"name":"ielts_learning_push_events","scopes":["learning:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Idempotently append a batch of Agent-owned learning events to the authenticated user's cloud record.","mcpToolNames":["ielts_learning_push_events"],"name":"learning.events.push","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}]}],"artifacts":[],"description":"Store the authenticated user's authoritative append-only learner events while Agents own planning, mastery, review timing, and next-action decisions.","external":{"mcpTools":["ielts_learning_pull_events","ielts_learning_push_events"],"skill":true},"id":"learning_events.domain","intents":["保存学习记录","同步学习记录","读取云端学习事件"],"openableSurfaces":[],"state":["events","cursor"],"stateFields":[{"description":"Authoritative append-only learning events returned by MCP.","name":"events","source":"mcp_result"},{"description":"Server cursor for incremental learning-event synchronization.","name":"cursor","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["学习记录","同步","Agent"],"title":"Learning Events","runtimeKind":"remote"},{"actions":[{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"includeFinished","name":"includeFinished","required":false,"type":"boolean"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_study_plans_list","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"List the user's study plans with exact ids, revisions, progress, and latest review so an existing plan can be selected.","mcpToolNames":["ielts_study_plans_list"],"name":"study_plans.list","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_get","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Read one study plan by an exact id returned by the conversation, workspace context, or plan list, including every task and the latest AI review.","mcpToolNames":["ielts_study_plans_get"],"name":"study_plans.get","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]},"name":"ielts_study_plans_create","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Create a study plan after its purpose and workable schedule are clear, or create a one-time reminder with an explicit time. Ordinary plans need no prior catalog or course lookup; the planner expands the goal into daily tasks. Use separate blocks only for multiple sessions on each day.","mcpToolNames":["ielts_study_plans_create"],"name":"study_plans.create","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"All changes for this user request. Use shorten_plan when reducing the number of study days. Changes are committed atomically.","name":"changes","required":true,"type":"unknown[]"},{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_apply_patch","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update one exact study-plan revision atomically without creating a second plan. Shorten the plan duration, or replace, add, remove, and move tasks. Use one add_task per independent activity, including multiple tasks on the same day.","mcpToolNames":["ielts_study_plans_apply_patch"],"name":"study_plans.apply_patch","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"tasks","name":"tasks","required":true,"type":"record[]","fields":[{"description":"enabled","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"taskId","name":"taskId","required":true,"type":"number"},{"description":"wechatEnabled","name":"wechatEnabled","required":false,"type":"boolean"}]}]},"name":"ielts_study_plans_configure_reminders","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Enable, disable, or change task reminders inside an existing study plan. WeChat delivery remains optional per task.","mcpToolNames":["ielts_study_plans_configure_reminders"],"name":"study_plans.configure_reminders","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"acceptanceCriteria","name":"acceptanceCriteria","required":false,"type":"record[]","fields":[{"description":"id","name":"id","required":true,"type":"string"},{"description":"kind","name":"kind","required":false,"type":"string"},{"description":"label","name":"label","required":true,"type":"string"},{"description":"required","name":"required","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["completed_task_count","completed_task_kind","completion_evidence_count"]}]},{"description":"deadline","name":"deadline","required":false,"type":"string"},{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"goal","name":"goal","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"title","name":"title","required":false,"type":"string"}]},"name":"ielts_study_plans_update","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update a study plan using optimistic revision control.","mcpToolNames":["ielts_study_plans_update"],"name":"study_plans.update","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"Complete replacement plan for this request.","name":"replacement","required":true,"type":"record","fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]}]},"name":"ielts_study_plans_rebuild","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Atomically replace one exact study-plan revision with a complete new plan. A failed replacement leaves the original plan untouched; repeated Agent execution uses the action idempotency key.","mcpToolNames":["ielts_study_plans_rebuild"],"name":"study_plans.rebuild","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":true,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_delete","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Delete a study plan and all tasks that belong to it.","mcpToolNames":["ielts_study_plans_delete"],"name":"study_plans.delete","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Updated description.","name":"description","required":false,"type":"string"},{"description":"Updated due datetime.","name":"dueAt","required":false,"type":"string"},{"description":"Updated expiry datetime.","name":"expiresAt","required":false,"type":"string"},{"description":"Task card id.","name":"id","required":true,"type":"number"},{"description":"Updated priority, 0-100.","name":"priority","required":false,"type":"number"},{"description":"Updated status.","name":"status","required":false,"type":"string","values":["pending","visible","started","completed","dismissed","expired"]},{"description":"Updated title.","name":"title","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_update_task","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Update a task that belongs to a study plan, including completion status and due time.","mcpToolNames":["ielts_study_plans_update_task"],"name":"study_plans.update_task","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"planId","name":"planId","required":false,"type":"string"}]},"name":"ielts_study_plans_next_actions","scopes":["study_plans:read"],"sideEffect":"read","type":"mcp_tool"}],"description":"Return the most useful next tasks across active study plans.","mcpToolNames":["ielts_study_plans_next_actions"],"name":"study_plans.next_actions","policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"sideEffect":"read","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Prioritized next study actions returned by MCP.","name":"nextActions","source":"mcp_result"}]},{"bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_review","scopes":["study_plans:write"],"sideEffect":"write","type":"mcp_tool"}],"description":"Run AI acceptance review after every task in a study plan is complete.","mcpToolNames":["ielts_study_plans_review"],"name":"study_plans.review","policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"sideEffect":"write","verification":"MCP result is the authoritative state for this remote capability.","verificationStateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}]}],"artifacts":[],"description":"Create, read, update, delete, prioritize, and review study plans, including time-specific single-task reminders, through the shared backend capability runtime.","external":{"mcpTools":["ielts_study_plans_list","ielts_study_plans_get","ielts_study_plans_create","ielts_study_plans_apply_patch","ielts_study_plans_configure_reminders","ielts_study_plans_update","ielts_study_plans_rebuild","ielts_study_plans_delete","ielts_study_plans_update_task","ielts_study_plans_next_actions","ielts_study_plans_review"],"skill":true},"id":"study_plans.domain","intents":["制定学习计划","查询计划进度","告诉用户下一步","修改计划","验收计划"],"openableSurfaces":[],"state":["plans","tasks","nextActions","latestReview"],"stateFields":[{"description":"Persisted study plans and progress returned by MCP.","name":"plans","source":"mcp_result"},{"description":"Tasks owned by a study plan returned by MCP.","name":"tasks","source":"mcp_result"},{"description":"Prioritized next study actions returned by MCP.","name":"nextActions","source":"mcp_result"},{"description":"Latest persisted AI acceptance review returned by MCP.","name":"latestReview","source":"mcp_result"}],"surfaces":[{"agentControl":"mcp_tool","type":"mcp"}],"tags":["计划","任务","验收","MCP"],"title":"Study Plans","runtimeKind":"remote"}],"workspaceCapabilityTargets":[{"capabilityId":"toolbox.index","openableSurfaces":["side_panel"],"route":"/ai-apps","routeMatch":{"exact":"/ai-apps","nestedPrefix":"/ai-apps/","queryPrefix":"/ai-apps?"}},{"capabilityId":"learning.center","openableSurfaces":["side_panel"],"route":"/learning-center","routeMatch":{"exact":"/learning-center","nestedPrefix":"/learning-center/","queryPrefix":"/learning-center?"}},{"capabilityId":"practice.center","openableSurfaces":["side_panel"],"route":"/practice","routeMatch":{"exact":"/practice","nestedPrefix":"/practice/","queryPrefix":"/practice?"}},{"capabilityId":"learner.profile","openableSurfaces":["side_panel","floating_panel"],"route":"/footprints","routeMatch":{"exact":"/footprints","nestedPrefix":"/footprints/","queryPrefix":"/footprints?"}},{"capabilityId":"study_plans.manager","openableSurfaces":["side_panel"],"route":"/plans","routeMatch":{"exact":"/plans","nestedPrefix":"/plans/","queryPrefix":"/plans?"}},{"capabilityId":"mock.center","openableSurfaces":["side_panel"],"route":"/mock","routeMatch":{"exact":"/mock","nestedPrefix":"/mock/","queryPrefix":"/mock?"}},{"capabilityId":"prep.guides","openableSurfaces":["side_panel"],"route":"/prep-guides","routeMatch":{"exact":"/prep-guides","nestedPrefix":"/prep-guides/","queryPrefix":"/prep-guides?"}},{"capabilityId":"prep.prediction_hits","openableSurfaces":["side_panel"],"route":"/prediction-hits","routeMatch":{"exact":"/prediction-hits","nestedPrefix":"/prediction-hits/","queryPrefix":"/prediction-hits?"}},{"capabilityId":"listening.dictation","openableSurfaces":["side_panel"],"route":"/ai-apps/listening-dictation","routeMatch":{"exact":"/ai-apps/listening-dictation","nestedPrefix":"/ai-apps/listening-dictation/","queryPrefix":"/ai-apps/listening-dictation?"}},{"capabilityId":"speaking.topic_weaver","openableSurfaces":["side_panel"],"route":"/ai-apps/speaking-topic-weaver","routeMatch":{"exact":"/ai-apps/speaking-topic-weaver","nestedPrefix":"/ai-apps/speaking-topic-weaver/","queryPrefix":"/ai-apps/speaking-topic-weaver?"}}],"workspaceCapabilities":[{"actions":[],"category":"学习","description":"集中选择和打开 IELTS Buddy 的拓展功能。","artifacts":[],"external":{"skill":false,"webOnly":true,"mcpTools":[]},"id":"toolbox.index","intents":["打开技能工具箱","选择功能","查看拓展能力"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps","state":["visibleCapabilities","selectedCategory","search"],"stateFields":[{"description":"Visible toolbox capabilities after category and search filtering.","name":"visibleCapabilities","observables":{"snapshot":["visibleCapabilityCount"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected toolbox category.","name":"selectedCategory","observables":{"snapshot":["category"]},"source":"workspace_context"},{"description":"Toolbox search query.","name":"search","observables":{"snapshot":["query"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps","type":"side_panel"}],"tags":["技能工具箱","入口","功能"],"title":"技能工具箱","toolbox":false,"runtimeKind":"workspace"},{"actions":[{"description":"Open a subject course map and expose course progress.","name":"learning.open_subject","sideEffect":"read","verification":"Workspace state exposes selectedSubject and visibleCourses for the opened subject.","workspaceActionNames":["learning_center_open_subject"],"bindings":[{"input":{"fields":[{"description":"Target subject.","name":"subject","required":true,"type":"string","values":["listening","reading","writing","speaking","grammar"]}]},"name":"learning_center_open_subject","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current learning subject or subject tab.","name":"selectedSubject","observables":{"snapshot":["selectedSubject","visibleSubjects"]},"source":"workspace_context"},{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Open a course video, interactive courseware, material, or linked practice task.","name":"learning.open_course_item","sideEffect":"read","verification":"Workspace state exposes activeCourse, activeResourceType, and selected resource ids.","workspaceActionNames":["learning_center_open_course_resource"],"bindings":[{"input":{"fields":[{"description":"Target course id. Uses active course when omitted.","name":"courseId","required":false,"type":"number"},{"description":"Resource type to open.","name":"resourceType","required":false,"type":"string","values":["video","courseware","material","practice"]},{"description":"Material id when opening a material.","name":"materialId","required":false,"type":"number"},{"description":"Practice link id when opening a linked task.","name":"linkId","required":false,"type":"number"},{"description":"Practice part id for locating a linked task.","name":"partId","required":false,"type":"number"}]},"name":"learning_center_open_course_resource","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Refresh the current course state.","name":"learning.refresh_course","sideEffect":"read","verification":"Workspace runtime stateVersion changes and activeCourse/progress are refreshed.","workspaceActionNames":["learning_center_refresh_course"],"bindings":[{"input":{"fields":[{"description":"Course id to refresh. Uses active course when omitted.","name":"courseId","required":false,"type":"number"}]},"name":"learning_center_refresh_course","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"}]}],"category":"学习","description":"按科目查看课程、视频、资料和关联练习。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"learning.center","intents":["安排学习路径","打开课程","查看学习进度"],"openableSurfaces":["side_panel"],"pageType":"learning_center","route":"/learning-center","state":["selectedSubject","selectedCourse","progress","visibleTasks"],"stateFields":[{"description":"Current learning subject or subject tab.","name":"selectedSubject","observables":{"snapshot":["selectedSubject","visibleSubjects"]},"source":"workspace_context"},{"description":"Active course, lesson, video, material, or practice resource.","name":"selectedCourse","observables":{"entityIds":["courseId","materialId","practiceLinkId","practiceSessionId"],"snapshot":["activeCourse","activeResource","activeResourceType","activeMaterialId","activePracticeLinkId","activePracticeSessionId"],"visibleIds":true},"source":"workspace_context"},{"description":"Course progress and completion state.","name":"progress","observables":{"snapshot":["progress"],"runtime":["stateVersion"]},"source":"workspace_context"},{"description":"Visible linked learning tasks or course resources.","name":"visibleTasks","observables":{"snapshot":["practiceLinks","visibleCourses"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/learning-center","type":"side_panel"}],"tags":["课程","资料","练习"],"title":"雅思全科课","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"List question-bank subjects, source categories, taxonomy groups, tags, difficulty values, and availability counts.","name":"practice.list_taxonomy","sideEffect":"read","verification":"MCP returns active taxonomy groups, tags, and availability counts.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional difficulty filter used to calculate available counts.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Whether availability counts include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Optional question search text used to calculate available counts.","name":"search","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Currently selected tag ids used to calculate dependent availability.","name":"tagIds","required":false,"type":"number[]"},{"description":"User-mentioned question-bank category, material, test set, or other taxonomy terms used to find exact tag ids before searching practice.","name":"tagQueries","required":false,"type":"unknown[]"}]},"name":"ielts_practice_list_taxonomy","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_list_taxonomy"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"}]},{"description":"Search practice parts by skill, tag, difficulty, and query.","name":"practice.search_parts","sideEffect":"read","verification":"Practice list state exposes subject, search/filter state, visiblePartCount, and visible part ids.","workspaceActionNames":["practice_list_set_subject","practice_list_search","practice_list_set_filters_open"],"bindings":[{"input":{"fields":[{"description":"Practice subject.","name":"subject","required":true,"type":"string","values":["listening","reading","speaking","writing"]}]},"name":"practice_list_set_subject","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"practice_list_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the practice filter panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"practice_list_set_filters_open","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Cursor returned by the previous practice.search_parts call.","name":"cursor","required":false,"type":"string"},{"description":"Practice difficulty filter.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Part ids the local Agent has ruled out for this selection.","name":"excludePartIds","required":false,"type":"number[]"},{"description":"Whether to include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Result limit, 1-6.","name":"limit","required":false,"type":"number"},{"description":"Whether the caller explicitly wants unseen parts before previously attempted parts.","name":"preferUnseen","required":false,"type":"boolean"},{"description":"Optional free-text title search.","name":"search","required":false,"type":"string"},{"description":"Catalog order or latest-first order chosen by the caller.","name":"sort","required":false,"type":"string","values":["catalog","latest"]},{"description":"Practice subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Exact taxonomy tag ids resolved by practice.list_taxonomy.","name":"tagIds","required":false,"type":"number[]"}]},"name":"ielts_practice_search_parts","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_search_parts"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current practice subject filter.","name":"subject","observables":{"entityIds":["subject"],"snapshot":["subject"]},"source":"workspace_context"},{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"},{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read one practice part without answers and prepare its start-session input.","name":"practice.read_part","sideEffect":"read","verification":"MCP returns the requested part content with answersIncluded=false and startSessionInput.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum material characters to return.","name":"maxChars","required":false,"type":"number"},{"description":"Practice part id returned by practice.search_parts.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_read_part","scopes":["question_bank:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_read_part"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Create a practice session and open the exercise UI.","name":"practice.start_session","sideEffect":"write","verification":"Created session id is returned by MCP or the workspace navigates to /practice/session/:sessionId.","workspaceActionNames":["practice_list_start_session"],"bindings":[{"input":{"fields":[{"description":"Practice part id. Uses first visible part when omitted.","name":"partId","required":false,"type":"number"}]},"name":"practice_list_start_session","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Exact IELTS Buddy practice part id selected by the local Agent.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_start_session","scopes":["practice:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_start_session"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Operate an active practice session.","name":"practice.operate_session","sideEffect":"write","verification":"Practice session state exposes current slot, answeredCount, submitted state, or verified mutation id.","workspaceActionNames":["practice_session_jump_to_question","practice_session_set_answer","practice_session_set_marked","practice_session_set_paused","practice_session_toggle_result_popover","practice_session_set_transcript_open","practice_session_submit"],"bindings":[{"input":{"fields":[{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_jump_to_question","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Answer text to write.","name":"answer","required":true,"type":"string"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_set_answer","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"true marks, false unmarks, omitted toggles.","name":"marked","required":false,"type":"boolean"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_set_marked","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"true pauses, false resumes.","name":"paused","required":true,"type":"boolean"}]},"name":"practice_session_set_paused","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the result popover is open. Defaults to true.","name":"open","required":false,"type":"boolean"},{"description":"Displayed question number. Practice uses source numbering; mock uses the current section's 1-based numbering.","name":"questionNumber","required":false,"type":"number"},{"description":"Question slot key. Takes precedence over questionNumber.","name":"slotKey","required":false,"type":"string"}]},"name":"practice_session_toggle_result_popover","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the listening transcript panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"practice_session_set_transcript_open","sideEffect":"write","type":"workspace_action"},{"input":{"fields":[{"description":"Must be true when unanswered questions remain.","name":"confirmUnanswered","required":false,"type":"boolean"}]},"name":"practice_session_submit","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_practice_read_session","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Include a bounded snapshot of the completed part's original material when local evidence analysis needs it.","name":"includeMaterial","required":false,"type":"boolean"},{"description":"Maximum combined characters returned for original material.","name":"maxMaterialChars","required":false,"type":"number"},{"description":"Return only incorrect objective items or all graded objective items.","name":"scope","required":false,"type":"string","values":["incorrect","all"]},{"description":"Submitted Reading or Listening practice session id.","name":"sessionId","required":true,"type":"number"},{"description":"Optional exact question slot keys to review.","name":"slotKeys","required":false,"type":"unknown[]"}]},"name":"ielts_practice_read_review","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"},{"auth":"user","destructive":true,"input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"},{"description":"Elapsed duration in seconds.","name":"durationSeconds","required":false,"type":"number"},{"description":"Answer objects with slotKey and answer.","name":"answers","required":false,"type":"record[]","fields":[{"description":"slotKey","name":"slotKey","required":true,"type":"string"},{"description":"answer","name":"answer","required":false,"type":"unknown"}]}]},"name":"ielts_practice_submit_session","scopes":["practice:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_read_session","ielts_practice_read_review","ielts_practice_submit_session"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read the current learner's concrete practice records. Each record exposes a session id for detail or review follow-up.","name":"practice.read_recent_activity","sideEffect":"read","verification":"MCP returns factual practice records with session ids or workspace state exposes the current practice context.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateFrom","required":false,"type":"string"},{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateTo","required":false,"type":"string"},{"description":"Result limit, 1-30.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset returned by the preceding call.","name":"offset","required":false,"type":"number"},{"description":"Optional record type. Empty returns practice and mock records.","name":"sessionType","required":false,"type":"string","values":["","practice","mock"]},{"description":"Optional record status. Empty returns all statuses.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]},{"description":"Optional subject filter. Empty returns every subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing","mock"]},{"description":"Relative record range in the Asia/Shanghai calendar. Ignored when dateFrom or dateTo is supplied.","name":"timeRange","required":false,"type":"string","values":["all","today","yesterday","7d","30d"]}]},"name":"ielts_practice_recent_activity","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_practice_recent_activity"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}]}],"category":"练习","description":"听力、阅读、口语、写作 Part 搜索、筛选和开练。","artifacts":[],"external":{"skill":true,"mcpTools":["ielts_practice_search_parts","ielts_practice_list_taxonomy","ielts_practice_read_part","ielts_practice_start_session","ielts_practice_read_session","ielts_practice_read_review","ielts_practice_submit_session","ielts_practice_recent_activity"]},"id":"practice.center","intents":["查找练习","开始练习","继续练习","提交答案"],"openableSurfaces":["side_panel"],"pageType":"practice_list","route":"/practice","state":["subject","filters","visibleParts","activeSession"],"stateFields":[{"description":"Current practice subject filter.","name":"subject","observables":{"entityIds":["subject"],"snapshot":["subject"]},"source":"workspace_context"},{"description":"Search query, tag filters, and filter panel state.","name":"filters","observables":{"snapshot":["search","selectedFilter","filtersOpen"]},"source":"workspace_context"},{"description":"Practice parts visible in the current list.","name":"visibleParts","observables":{"snapshot":["visiblePartCount","hasMore"],"visibleIds":true},"source":"workspace_context"},{"description":"Started or active practice session context.","name":"activeSession","observables":{"entityIds":["sessionId","slotKey","sectionKey"],"snapshot":["startedSessionId","startingPartId","answeredCount","currentSlotKey","isSubmitted","totalQuestions"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/practice","type":"side_panel"}],"tags":["听力","阅读","写作","口语"],"title":"刷题","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Read and filter the learner's unified activity timeline. Practice and mock activities expose their session id for record-level follow-up.","name":"footprints.list","sideEffect":"read","verification":"MCP returns filtered footprint activities or the browser shows the requested footprints tab.","workspaceActionNames":["footprints_set_tab"],"bindings":[{"input":{"fields":[{"description":"Footprints tab to show.","name":"tab","required":true,"type":"string","values":["activity","assets"]}]},"name":"footprints_set_tab","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Activity kinds to include. Empty includes all kinds.","name":"kinds","required":false,"type":"unknown[]"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Title or description search query.","name":"query","required":false,"type":"string"},{"description":"timeRange","name":"timeRange","required":false,"type":"string","values":["all","today","7d","30d"]}]},"name":"ielts_footprints_list","scopes":["profile:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_footprints_list"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}]},{"description":"Read learner skill profiles and aggregated activity facts. Concrete practice records use their own session-id data contract.","name":"learner.read_profile","sideEffect":"read","verification":"MCP returns learner profiles or the browser shows the learner footprint/profile surface.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Optional skill filter.","name":"skill","required":false,"type":"string","values":["","writing","speaking","reading","listening"]}]},"name":"ielts_learner_read_profile","scopes":["profile:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_learner_read_profile"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}]}],"category":"学习","description":"读取学习画像和聚合学习活动，用于个性化规划；具体练习记录和逐题复盘由 Agent 按 sessionId 读取。","artifacts":[],"external":{"skill":true,"mcpTools":["ielts_footprints_list","ielts_learner_read_profile"]},"id":"learner.profile","intents":["读取学习画像","查看学习足迹","分析薄弱项"],"openableSurfaces":["side_panel","floating_panel"],"pageType":"footprints","route":"/footprints","state":["summary","recentActivity","visibleActivity","todayActivity","heatmap","filters"],"stateFields":[{"description":"Learner footprint summary and aggregate counts.","name":"summary","observables":{"snapshot":["counts","summary","streakDays","weekActivityCount"]},"source":"workspace_context"},{"description":"Recent learning, practice, source, and session activity.","name":"recentActivity","observables":{"snapshot":["fileCount","historyCount","recentActivity"],"visibleIds":true},"source":"workspace_context"},{"description":"Current footprint activity after page filters.","name":"visibleActivity","observables":{"snapshot":["visibleActivity","visibleCount","visibleGroups"],"visibleIds":true},"source":"workspace_context"},{"description":"Activity counts grouped by type for today.","name":"todayActivity","observables":{"snapshot":["todayActivity"]},"source":"workspace_context"},{"description":"Recent learning heatmap days and intensity levels.","name":"heatmap","observables":{"snapshot":["heatmap"]},"source":"workspace_context"},{"description":"Current footprint type, time, and search filters.","name":"filters","observables":{"snapshot":["activeFilter","filters","query","timeRange"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/footprints","type":"side_panel"},{"agentControl":"recommend_workspace_entry","type":"floating_panel"}],"tags":["画像","薄弱项","进度"],"title":"我的足迹","toolbox":false,"runtimeKind":"workspace"},{"actions":[],"category":"学习","description":"查看 Agent 与用户确认后的学习计划、任务进度、日历安排与验收结果。","artifacts":[],"external":{"skill":true,"mcpTools":[]},"id":"study_plans.manager","intents":["查看学习计划","查看下一项任务","查看计划日历","打开计划任务","查看计划验收"],"openableSurfaces":["side_panel"],"pageType":"plans","route":"/plans","state":["activeTab","focusedMonth","visiblePlans","nextTasks"],"stateFields":[{"description":"Current study plan view.","name":"activeTab","observables":{"snapshot":["activeTab"]},"source":"workspace_context"},{"description":"Calendar month currently in focus.","name":"focusedMonth","observables":{"snapshot":["focusedMonth"]},"source":"workspace_context"},{"description":"Visible study plans and current selection.","name":"visiblePlans","observables":{"entityIds":["selectedPlanId"],"snapshot":["planCount","activePlanCount","completedPlanCount","selectedPlanId"],"visibleIds":true},"source":"workspace_context"},{"description":"The next actionable study plan tasks.","name":"nextTasks","observables":{"entityIds":["selectedTaskId"],"snapshot":["nextTaskCount"],"visibleIds":true},"source":"mcp_result"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/plans","type":"side_panel"}],"tags":["学习计划","任务","日历","验收"],"title":"学习计划","toolbox":false,"runtimeKind":"workspace"},{"actions":[{"description":"List fixed mock papers and free assembly options.","name":"mock.list_papers","sideEffect":"read","verification":"Mock list state exposes activeTab, paperCount, partCount, and current filters.","workspaceActionNames":["mock_list_set_tab","mock_list_search","mock_list_set_section","mock_list_set_difficulty","mock_list_set_filters_open"],"bindings":[{"input":{"fields":[{"description":"Mock center tab.","name":"tab","required":true,"type":"string","values":["papers","compose"]}]},"name":"mock_list_set_tab","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"mock_list_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Mock assembly section.","name":"section","required":true,"type":"string","values":["全部","听力","阅读","写作","口语"]}]},"name":"mock_list_set_section","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Mock assembly difficulty.","name":"difficulty","required":true,"type":"string","values":["全部","基础","核心","冲刺"]}]},"name":"mock_list_set_difficulty","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Whether the mock filter panel is open.","name":"open","required":true,"type":"boolean"}]},"name":"mock_list_set_filters_open","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of available mock papers to return.","name":"limit","required":false,"type":"number"},{"description":"Maximum duration in minutes. Zero disables the duration filter.","name":"maxDurationMinutes","required":false,"type":"number"},{"description":"Optional required subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]}]},"name":"ielts_mock_list_papers","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_mock_list_papers"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Visible fixed mock papers or free assembly parts.","name":"mockPapers","observables":{"snapshot":["activeTab","paperCount","partCount","query","section","difficulty"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected mock paper or custom assembly.","name":"selectedPaper","observables":{"snapshot":["selectedPartCount","startingKey"]},"source":"workspace_context"}]},{"description":"Read recent mock sessions and section-level results for the current learner.","name":"mock.read_recent_activity","sideEffect":"read","verification":"MCP returns recent mock sessions with compact progress and section summaries.","bindings":[{"auth":"user","destructive":false,"input":{"fields":[{"description":"Maximum number of recent mock sessions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional mock session status filter.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]}]},"name":"ielts_mock_recent_activity","scopes":["practice:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_mock_recent_activity"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Save a completed mock review summary as a versioned document asset.","name":"mock.save_review_report","sideEffect":"write","verification":"Mock guide state exposes the saved document asset id.","workspaceActionNames":["mock_center_save_review_report"],"bindings":[{"input":{"fields":[]},"name":"mock_center_save_review_report","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Refresh an existing mock review document asset and append a version snapshot.","name":"mock.refresh_review_report","sideEffect":"write","verification":"Mock guide state exposes the same artifactId with a refreshed artifactUpdatedAt snapshot.","workspaceActionNames":["mock_center_refresh_review_report"],"bindings":[{"input":{"fields":[]},"name":"mock_center_refresh_review_report","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}]}],"category":"模考","description":"固定模考卷和自由组卷，完成后进入复盘。","artifacts":[{"description":"Completed mock review with score, mistakes, and next practice recommendations.","refreshable":true,"source":"document_asset","title":"Mock Review Report","type":"mock_review_report"}],"external":{"skill":true,"webOnly":true,"mcpTools":["ielts_mock_list_papers","ielts_mock_recent_activity"]},"id":"mock.center","intents":["开始模考","自由组卷","查看复盘"],"openableSurfaces":["side_panel"],"pageType":"mock_list","route":"/mock","state":["mockPapers","selectedPaper","recentReviews"],"stateFields":[{"description":"Visible fixed mock papers or free assembly parts.","name":"mockPapers","observables":{"snapshot":["activeTab","paperCount","partCount","query","section","difficulty"],"visibleIds":true},"source":"workspace_context"},{"description":"Selected mock paper or custom assembly.","name":"selectedPaper","observables":{"snapshot":["selectedPartCount","startingKey"]},"source":"workspace_context"},{"description":"Mock review report or recent completed mock context.","name":"recentReviews","observables":{"entityIds":["artifactId","sessionId"],"snapshot":["artifactId","artifactUpdatedAt","completedCount","gradedCount","overallBand","reportReady"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/mock","type":"side_panel"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["组卷","复盘"],"title":"模考","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Search and filter published IELTS knowledge articles.","name":"prep.guides.browse","sideEffect":"read","verification":"Prep guide state exposes the search query, guide count, and selected tag.","workspaceActionNames":["prep_guides_search","prep_guides_set_tag"],"bindings":[{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"prep_guides_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Guide tag.","name":"tag","required":true,"type":"string","values":["全部","雅思备考","考试政策","留学申请","院校专业","留学政策","四六级"]}]},"name":"prep_guides_set_tag","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Submitted prep search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Read a published IELTS knowledge article.","name":"prep.guides.read","sideEffect":"read","verification":"Guide content is returned by MCP or workspace state exposes selectedArticleSlug.","workspaceActionNames":["prep_guides_open_article","prep_guides_close_article"],"bindings":[{"input":{"fields":[{"description":"Guide article slug visible in current guide list.","name":"slug","required":true,"type":"string"}]},"name":"prep_guides_open_article","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[]},"name":"prep_guides_close_article","sideEffect":"read","type":"workspace_action"},{"auth":"public","destructive":false,"input":{"fields":[{"description":"Published prep guide slug.","name":"slug","required":true,"type":"string"}]},"name":"ielts_prep_read_guide","scopes":["prep:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_prep_read_guide"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}]}],"category":"学习","description":"检索和阅读备考方法、考试政策、留学申请与院校信息。","artifacts":[{"description":"Reusable knowledge digest created from selected IELTS knowledge articles.","refreshable":true,"source":"document_asset","title":"Prep Digest","type":"prep_digest"}],"external":{"skill":true,"webOnly":true,"mcpTools":["ielts_prep_read_guide"]},"id":"prep.guides","intents":["查雅思知识库","推荐方法文章","阅读考试政策"],"openableSurfaces":["side_panel"],"pageType":"prep_guides","route":"/prep-guides","state":["query","visibleGuides"],"stateFields":[{"description":"Submitted prep search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prep guide articles and selected guide slug.","name":"visibleGuides","observables":{"entityIds":["selectedArticleId","selectedArticleSlug"],"snapshot":["articleCount","activeGuideTag","selectedArticleSlug"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/prep-guides","type":"side_panel"},{"agentControl":"artifact_output","type":"artifact"}],"tags":["知识库","方法","政策"],"title":"雅思知识库","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Search and filter published prediction-hit records.","name":"prep.prediction_hits.browse","sideEffect":"read","verification":"Prediction-hit state exposes the search query, visible count, topic, and date filters.","workspaceActionNames":["prediction_hits_search","prediction_hits_set_topic","prediction_hits_set_date"],"bindings":[{"input":{"fields":[{"description":"Search text. Empty string clears search.","name":"query","required":false,"type":"string"}]},"name":"prediction_hits_search","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Prediction topic type.","name":"topic","required":true,"type":"string","values":["全部","写作命中","阅读命中","听力命中","1","2","3"]}]},"name":"prediction_hits_set_topic","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"Prediction date filter. Empty value means 全部日期.","name":"date","required":false,"type":"string"}]},"name":"prediction_hits_set_date","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Submitted prediction-hit search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prediction-hit records and selected filters.","name":"visiblePredictions","observables":{"snapshot":["predictionCount","activePredictionTopicType","activePredictionDate"],"visibleIds":true},"source":"workspace_context"}]}],"category":"学习","description":"查看已经发布的雅思预测命中记录。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"prep.prediction_hits","intents":["查看预测命中","最近考到哪些题"],"openableSurfaces":["side_panel"],"pageType":"prediction_hits","route":"/prediction-hits","state":["query","visiblePredictions"],"stateFields":[{"description":"Submitted prediction-hit search query.","name":"query","observables":{"snapshot":["search"]},"source":"workspace_context"},{"description":"Visible prediction-hit records and selected filters.","name":"visiblePredictions","observables":{"snapshot":["predictionCount","activePredictionTopicType","activePredictionDate"],"visibleIds":true},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/prediction-hits","type":"side_panel"}],"tags":["预测","命中"],"title":"预测命中","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"Select the listening transcript part used for dictation.","name":"listening_dictation.select_part","sideEffect":"write","verification":"Workspace state exposes partId and resets the current line to the first segment.","workspaceActionNames":["listening_dictation_select_part"],"bindings":[{"input":{"fields":[{"description":"Listening practice part id.","name":"partId","required":true,"type":"number"}]},"name":"listening_dictation_select_part","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Configure dictation playback speed.","name":"listening_dictation.configure","sideEffect":"write","verification":"Workspace state exposes the playback speed.","workspaceActionNames":["listening_dictation_set_speed"],"bindings":[{"input":{"fields":[{"description":"Playback speed.","name":"speed","required":true,"type":"number","values":["0.75","1","1.25"]}]},"name":"listening_dictation_set_speed","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Jump to a transcript segment by line number.","name":"listening_dictation.go_to_line","sideEffect":"write","verification":"Workspace state exposes currentLineNumber and currentLineId.","workspaceActionNames":["listening_dictation_go_to_line"],"bindings":[{"input":{"fields":[{"description":"Target transcript line number, 1-based.","name":"lineNumber","required":true,"type":"number"}]},"name":"listening_dictation_go_to_line","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Fill one blank on the current dictation line.","name":"listening_dictation.set_answer","sideEffect":"write","verification":"Workspace state exposes currentAnsweredBlanks for the active segment.","workspaceActionNames":["listening_dictation_set_current_answer"],"bindings":[{"input":{"fields":[{"description":"Blank number on the current line, 1-based.","name":"blankIndex","required":true,"type":"number"},{"description":"Answer text for the blank.","name":"value","required":true,"type":"string"}]},"name":"listening_dictation_set_current_answer","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"}]},{"description":"Check the current dictation line and update score/progress.","name":"listening_dictation.check_current_line","sideEffect":"write","verification":"Workspace state exposes currentLineChecked and updated score/progress.","workspaceActionNames":["listening_dictation_check_current_line"],"bindings":[{"input":{"fields":[]},"name":"listening_dictation_check_current_line","sideEffect":"write","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"},{"description":"Checked blank count, correctness, and accuracy.","name":"score","observables":{"snapshot":["accuracy","checkedBlanks","checkedLines","correctBlanks"]},"source":"workspace_context"}]},{"description":"Replay or pause the current transcript segment.","name":"listening_dictation.playback","sideEffect":"read","verification":"Workspace state exposes currentLineId and playing state.","workspaceActionNames":["listening_dictation_replay_current_line","listening_dictation_set_playing"],"bindings":[{"input":{"fields":[]},"name":"listening_dictation_replay_current_line","sideEffect":"read","type":"workspace_action"},{"input":{"fields":[{"description":"true to play, false to pause.","name":"playing","required":true,"type":"boolean"}]},"name":"listening_dictation_set_playing","sideEffect":"read","type":"workspace_action"}],"mcpToolNames":[],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"}]}],"category":"练习","description":"用题库听力原文生成单词挖空训练，按句重听并即时核对。","artifacts":[],"external":{"skill":true,"webOnly":true,"mcpTools":[]},"id":"listening.dictation","intents":["听力精听","听写练习","重听句子"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps/listening-dictation","state":["partId","currentSegment","answers","score"],"stateFields":[{"description":"Selected listening practice part used as dictation material.","name":"partId","observables":{"entityIds":["partId"],"snapshot":["partId","partTitle","lineCount","totalBlankCount"]},"source":"workspace_context"},{"description":"Current transcript line, line number, and segment context.","name":"currentSegment","observables":{"entityIds":["currentLineId"],"snapshot":["currentSegment","currentLineId","currentLineNumber","currentIndex","currentBlankCount","playing"],"visibleIds":true},"source":"workspace_context"},{"description":"Current dictation blank answers and checked line state.","name":"answers","observables":{"snapshot":["currentAnsweredBlanks","currentLineChecked","currentLineId"]},"source":"workspace_context"},{"description":"Checked blank count, correctness, and accuracy.","name":"score","observables":{"snapshot":["accuracy","checkedBlanks","checkedLines","correctBlanks"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps/listening-dictation","type":"side_panel"}],"tags":["精听","听写","题库原文"],"title":"听力精听","toolbox":true,"runtimeKind":"workspace"},{"actions":[{"description":"List the active speaking material library and refresh the visible page state.","name":"speaking_materials.list","sideEffect":"read","verification":"Speaking material state exposes the refreshed material library and current selection.","workspaceActionNames":["speaking_materials_list"],"bindings":[{"input":{"fields":[]},"name":"speaking_materials_list","sideEffect":"read","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[]},"name":"ielts_speaking_materials_list","scopes":["speaking:read"],"sideEffect":"read","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_list"],"policy":{"allowedWritePolicies":[],"reasonRequired":false,"requiresWritePolicy":false},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}]},{"description":"Create one speaking material and automatically match questions, expressions, and answer guidance unless exact links are supplied.","name":"speaking_materials.create","sideEffect":"write","verification":"Speaking material state exposes the newly selected material and its question links.","workspaceActionNames":["speaking_materials_create"],"bindings":[{"input":{"fields":[{"description":"Material title.","name":"title","required":true,"type":"string"},{"description":"Core experience, story, or opinion.","name":"coreStory","required":true,"type":"string"},{"description":"Exact speaking question links.","name":"questionLinks","required":false,"type":"record[]"}]},"name":"speaking_materials_create","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"coreStory","name":"coreStory","required":true,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":true,"type":"string"}]},"name":"ielts_speaking_materials_create","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_create"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Update one speaking material; core-content changes automatically refresh its question matches and guidance.","name":"speaking_materials.update","sideEffect":"write","verification":"Speaking material state exposes the updated material and refreshed question links.","workspaceActionNames":["speaking_materials_update"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"id","required":false,"type":"number"},{"description":"Updated material title.","name":"title","required":false,"type":"string"},{"description":"Updated core story.","name":"coreStory","required":false,"type":"string"},{"description":"Replacement speaking question links.","name":"questionLinks","required":false,"type":"record[]"}]},"name":"speaking_materials_update","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"coreStory","name":"coreStory","required":false,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_update","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_update"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Archive one speaking material from the active library.","name":"speaking_materials.archive","sideEffect":"write","verification":"Speaking material state no longer exposes the archived material id.","workspaceActionNames":["speaking_materials_archive"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"id","required":false,"type":"number"}]},"name":"speaking_materials_archive","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":true,"input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_archive","scopes":["speaking:write"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_archive"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"}]},{"description":"Start a practice session with one exact material and one exact speaking question.","name":"speaking_materials.start_practice","sideEffect":"write","verification":"A targeted speaking practice session is created and opened.","workspaceActionNames":["speaking_materials_start_practice"],"bindings":[{"input":{"fields":[{"description":"Material id. Uses the selected material when omitted.","name":"materialId","required":false,"type":"number"},{"description":"Question link id. Uses the first visible question when omitted.","name":"questionLinkId","required":false,"type":"number"}]},"name":"speaking_materials_start_practice","sideEffect":"write","type":"workspace_action"},{"auth":"user","destructive":false,"input":{"fields":[{"description":"materialId","name":"materialId","required":true,"type":"number"},{"description":"questionLinkId","name":"questionLinkId","required":true,"type":"number"}]},"name":"ielts_speaking_materials_start_practice","scopes":["speaking:practice"],"sideEffect":"write","type":"mcp_tool"}],"mcpToolNames":["ielts_speaking_materials_start_practice"],"policy":{"allowedWritePolicies":["user_confirmed"],"reasonRequired":true,"requiresWritePolicy":true},"verificationStateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}]}],"category":"练习","description":"保存真实口语素材，由 AI 匹配题库并补充表达和答题提示。","artifacts":[],"external":{"skill":true,"webOnly":false,"mcpTools":["ielts_speaking_materials_list","ielts_speaking_materials_create","ielts_speaking_materials_update","ielts_speaking_materials_archive","ielts_speaking_materials_start_practice"]},"id":"speaking.topic_weaver","intents":["口语素材","积累素材","关联口语题","口语串题","口语练习"],"openableSurfaces":["side_panel"],"pageType":"ai_app","route":"/ai-apps/speaking-topic-weaver","state":["materials","questionLinks","practiceRuns"],"stateFields":[{"description":"Active speaking material library and current selection.","name":"materials","observables":{"entityIds":["selectedMaterialId"],"snapshot":["materialCount","selectedMaterialId"],"visibleIds":true},"source":"workspace_context"},{"description":"Current question mappings for the selected material.","name":"questionLinks","observables":{"entityIds":["selectedQuestionLinkId"],"snapshot":["selectedQuestionLinkId"],"visibleIds":true},"source":"workspace_context"},{"description":"Practice history for the material library.","name":"practiceRuns","observables":{"snapshot":["practiceCount"]},"source":"workspace_context"}],"surfaces":[{"agentControl":"recommend_workspace_entry","primary":true,"route":"/ai-apps/speaking-topic-weaver","type":"side_panel"}],"tags":["素材库","题目关联","串题练习"],"title":"口语素材","toolbox":true,"runtimeKind":"workspace"}],"tools":[{"auth":"user","destructive":false,"description":"Read the IELTS full-course learning route as data, grouped by subject and unit, with course-level progress and browser URLs for optional continuation.","input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_read","productActionName":"learning_route.read","productCapabilityId":"learning.route","scopes":["courses:read"],"sideEffect":"read","title":"Read learning route"},{"auth":"user","destructive":false,"description":"Read course-route progress summaries by subject and unit from course learning progress and linked practice history.","input":{"fields":[{"description":"Maximum route course nodes to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]}]},"name":"ielts_learning_route_progress","productActionName":"learning_route.progress","productCapabilityId":"learning.route","scopes":["courses:read"],"sideEffect":"read","title":"Read learning route progress"},{"auth":"user","destructive":false,"description":"Return the next IELTS course-route actions for the learner, prioritizing in-progress course nodes and then the next unfinished route nodes.","input":{"fields":[{"description":"Number of next route actions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional IELTS subject filter. Empty returns the full-course route.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing","speaking"]},{"description":"Learner's available study time for the next action.","name":"availableMinutes","required":false,"type":"number"}]},"name":"ielts_learning_route_next","productActionName":"learning_route.next","productCapabilityId":"learning.route","scopes":["courses:read"],"sideEffect":"read","title":"Read next route actions"},{"auth":"user","destructive":false,"description":"Search across question parts, courses, course sections, prep guides, prediction hits, and the current user's assets. Prep guides and assets use permission-aware hybrid full-text and semantic retrieval.","input":{"fields":[{"description":"Maximum number of resources to return.","name":"limit","required":false,"type":"number"},{"description":"Keywords or a natural-language description of the needed learning resource.","name":"query","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Typed taxonomy values or resource labels that must match.","name":"tags","required":false,"type":"unknown[]"},{"description":"Resource types to search. Empty searches all supported types.","name":"types","required":false,"type":"unknown[]"}]},"name":"ielts_resources_search","productActionName":"resources.search","productCapabilityId":"resources.library","scopes":["resources:read"],"sideEffect":"read","title":"Search learning resources"},{"auth":"user","destructive":false,"description":"Read one typed learning resource by the stable handle returned from resources.search. Question answers, explanations, and listening transcripts are excluded.","input":{"fields":[{"description":"Stable typed handle returned by resources.search or resources.related.","name":"handle","required":true,"type":"string"},{"description":"Maximum text characters to return.","name":"maxChars","required":false,"type":"number"}]},"name":"ielts_resources_read","productActionName":"resources.read","productCapabilityId":"resources.library","scopes":["resources:read"],"sideEffect":"read","title":"Read learning resource"},{"auth":"user","destructive":false,"description":"Find explicitly or structurally related resources, such as course-to-practice and prediction-to-question relationships.","input":{"fields":[{"description":"Stable typed resource handle.","name":"handle","required":true,"type":"string"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"Optional relation types to include.","name":"relationTypes","required":false,"type":"unknown[]"}]},"name":"ielts_resources_related","productActionName":"resources.related","productCapabilityId":"resources.library","scopes":["resources:read"],"sideEffect":"read","title":"Find related learning resources"},{"auth":"user","destructive":false,"description":"List and search words in the current user's personal vocabulary book.","input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Search phrase, meaning, or usage.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_list","productActionName":"vocabulary.personal.list","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:read"],"sideEffect":"read","title":"List personal vocabulary"},{"auth":"user","destructive":false,"description":"Export personal vocabulary content as JSON or CSV for a local Agent or user-owned backup. Review progress is intentionally excluded.","input":{"fields":[{"description":"Portable vocabulary content format.","name":"format","required":false,"type":"string","values":["csv","json"]},{"description":"Maximum entries in this export page.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_export","productActionName":"vocabulary.personal.export","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:read"],"sideEffect":"read","title":"Export personal vocabulary"},{"auth":"user","destructive":false,"description":"Read spaced-repetition progress from the current user's personal vocabulary book.","input":{"fields":[{"description":"Maximum recent/due items to return.","name":"limit","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_progress","productActionName":"vocabulary.personal.progress","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:read"],"sideEffect":"read","title":"Read personal vocabulary progress"},{"auth":"user","destructive":false,"description":"Prepare flashcards from the current user's personal vocabulary book.","input":{"fields":[{"description":"Avoid words reviewed in the last N days when possible.","name":"excludeRecentlyReviewedDays","required":false,"type":"number"},{"description":"Whether mastered words may be selected.","name":"includeMastered","required":false,"type":"boolean"},{"description":"Optional learning-state filter.","name":"learningState","required":false,"type":"string","values":["","new","learning","review","relearning","mastered"]},{"description":"Number of local flashcards to prepare.","name":"limit","required":false,"type":"number"},{"description":"Card selection strategy.","name":"mode","required":false,"type":"string","values":["mixed","due","new","weak","random"]},{"description":"Optional phrase, meaning, or usage search filter.","name":"query","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_prepare_cards","productActionName":"vocabulary.personal.prepare_cards","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:read"],"sideEffect":"read","title":"Prepare personal vocabulary cards"},{"auth":"user","destructive":false,"description":"Add or enrich words in the current user's personal vocabulary book while recording their source.","input":{"fields":[{"description":"Optional source sentence or context.","name":"context","required":false,"type":"string"},{"description":"items","name":"items","required":true,"type":"record[]","fields":[{"description":"Example sentence.","name":"example","required":false,"type":"string"},{"description":"Synonyms, collocations, or related expressions.","name":"expansion","required":false,"type":"unknown[]"},{"description":"Chinese or English meaning.","name":"meaning","required":false,"type":"string"},{"description":"Part of speech.","name":"partOfSpeech","required":false,"type":"string"},{"description":"Word or phrase.","name":"phrase","required":true,"type":"string"},{"description":"Usage note.","name":"usage","required":false,"type":"string"}]},{"description":"Stable source record id when available.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable source title.","name":"sourceTitle","required":false,"type":"string"},{"description":"Origin such as agent, reading_lexicon, practice, or course.","name":"sourceType","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_add","productActionName":"vocabulary.personal.add","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:write"],"sideEffect":"write","title":"Add personal vocabulary"},{"auth":"user","destructive":false,"description":"Import up to 500 personal vocabulary entries from JSON or CSV. Imported entries start with fresh learning progress and keep an import source record.","input":{"fields":[{"description":"UTF-8 JSON or CSV text. Import carries vocabulary content only, never review progress.","name":"content","required":true,"type":"string"},{"description":"Format of content.","name":"format","required":true,"type":"string","values":["csv","json"]},{"description":"Stable import id when available; otherwise the service derives one from the content.","name":"sourceId","required":false,"type":"string"},{"description":"Human-readable filename or import title.","name":"sourceTitle","required":false,"type":"string"}]},"name":"ielts_vocabulary_personal_import","productActionName":"vocabulary.personal.import","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:write"],"sideEffect":"write","title":"Import personal vocabulary"},{"auth":"user","destructive":false,"description":"Update the content or learning state of one personal vocabulary entry.","input":{"fields":[{"description":"example","name":"example","required":false,"type":"string"},{"description":"expansion","name":"expansion","required":false,"type":"unknown[]"},{"description":"meaning","name":"meaning","required":false,"type":"string"},{"description":"partOfSpeech","name":"partOfSpeech","required":false,"type":"string"},{"description":"phrase","name":"phrase","required":false,"type":"string"},{"description":"usage","name":"usage","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"},{"description":"learningState","name":"learningState","required":false,"type":"string","values":["new","learning","review","relearning","mastered"]}]},"name":"ielts_vocabulary_personal_update","productActionName":"vocabulary.personal.update","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:write"],"sideEffect":"write","title":"Update personal vocabulary"},{"auth":"user","destructive":false,"description":"Record one review result for a personal vocabulary entry and update spaced-repetition progress.","input":{"fields":[{"description":"Personal vocabulary item id.","name":"id","required":true,"type":"number"},{"description":"Review rating for spaced repetition.","name":"rating","required":true,"type":"string","values":["again","hard","good"]},{"description":"Optional answer latency in milliseconds.","name":"responseMs","required":false,"type":"number"}]},"name":"ielts_vocabulary_personal_record_review","productActionName":"vocabulary.personal.record_review","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:write"],"sideEffect":"write","title":"Record personal vocabulary review"},{"auth":"user","destructive":true,"description":"Delete one entry from the current user's personal vocabulary book.","input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_vocabulary_personal_delete","productActionName":"vocabulary.personal.delete","productCapabilityId":"vocabulary.domain","scopes":["vocabulary:write"],"sideEffect":"write","title":"Delete personal vocabulary"},{"auth":"public","destructive":false,"description":"Search exactly one IELTS Buddy prep resource type. Use resourceType=prediction_hit for recent exam recalls or prediction hits, and resourceType=prep_guide for articles. For the latest hits, set subject and leave query, testDate, and testMonth empty. Start with the first page; use nextOffset only when more records are needed. Prediction results include the filtered total count.","input":{"fields":[{"description":"Result limit, 1-8.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset.","name":"offset","required":false,"type":"number"},{"description":"Keyword, title, test point, or topic.","name":"query","required":false,"type":"string"},{"description":"Required resource type. One call searches guides or prediction hits, never both.","name":"resourceType","required":true,"type":"string","values":["prep_guide","prediction_hit"]},{"description":"Guide tag/category. Only applies to prep_guide.","name":"tag","required":false,"type":"string"},{"description":"IELTS subject filter. Only applies to prediction_hit.","name":"subject","required":false,"type":"string","values":["","listening","reading","writing"]},{"description":"Exam date in YYYY-MM-DD. Only applies to prediction_hit.","name":"testDate","required":false,"type":"string"},{"description":"Exam month in YYYY-MM. Only applies to prediction_hit; use it instead of one call per day.","name":"testMonth","required":false,"type":"string"}]},"name":"ielts_prep_search","productActionName":"prep.search","productCapabilityId":"prep.info","scopes":["prep:read"],"sideEffect":"read","title":"Search prep information"},{"auth":"public","destructive":false,"description":"Read one full published IELTS Buddy knowledge article by slug.","input":{"fields":[{"description":"Published prep guide slug.","name":"slug","required":true,"type":"string"}]},"name":"ielts_prep_read_guide","productActionName":"prep.guides.read","productCapabilityId":"prep.guides","scopes":["prep:read"],"sideEffect":"read","title":"Read IELTS knowledge article"},{"auth":"user","destructive":false,"description":"Search up to six compact IELTS Buddy question-bank candidates. Each candidate's origin.questionBank, origin.sourceBook, origin.sourceTest, and origin.sourceUnit are the authoritative source fields; do not infer source from title or ordinary tags. The server returns facts only; the local Agent chooses whether and which part to open.","input":{"fields":[{"description":"Cursor returned by the previous practice.search_parts call.","name":"cursor","required":false,"type":"string"},{"description":"Practice difficulty filter.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Part ids the local Agent has ruled out for this selection.","name":"excludePartIds","required":false,"type":"number[]"},{"description":"Whether to include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Result limit, 1-6.","name":"limit","required":false,"type":"number"},{"description":"Whether the caller explicitly wants unseen parts before previously attempted parts.","name":"preferUnseen","required":false,"type":"boolean"},{"description":"Optional free-text title search.","name":"search","required":false,"type":"string"},{"description":"Catalog order or latest-first order chosen by the caller.","name":"sort","required":false,"type":"string","values":["catalog","latest"]},{"description":"Practice subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Exact taxonomy tag ids resolved by practice.list_taxonomy.","name":"tagIds","required":false,"type":"number[]"}]},"name":"ielts_practice_search_parts","productActionName":"practice.search_parts","productCapabilityId":"practice.center","scopes":["question_bank:read"],"sideEffect":"read","title":"Search practice parts"},{"auth":"user","destructive":false,"description":"Resolve user-mentioned practice filter terms into active IELTS taxonomy tags and return availability counts for subject, difficulty, search, and selected-tag filters. Pass tagQueries before catalog searches that require question-bank category, material, test set, topic, Part, question type, skill, writing task type, or chart type.","input":{"fields":[{"description":"Optional difficulty filter used to calculate available counts.","name":"difficulty","required":false,"type":"string","values":["","基础","核心","冲刺"]},{"description":"Whether availability counts include course-linked parts.","name":"includeCourseLinked","required":false,"type":"boolean"},{"description":"Optional question search text used to calculate available counts.","name":"search","required":false,"type":"string"},{"description":"Optional IELTS subject filter.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]},{"description":"Currently selected tag ids used to calculate dependent availability.","name":"tagIds","required":false,"type":"number[]"},{"description":"User-mentioned question-bank category, material, test set, or other taxonomy terms used to find exact tag ids before searching practice.","name":"tagQueries","required":false,"type":"unknown[]"}]},"name":"ielts_practice_list_taxonomy","productActionName":"practice.list_taxonomy","productCapabilityId":"practice.center","scopes":["question_bank:read"],"sideEffect":"read","title":"List practice taxonomy"},{"auth":"user","destructive":false,"description":"Read one active practice part without answers, explanations, or listening transcript, and return the input needed to start a practice session.","input":{"fields":[{"description":"Maximum material characters to return.","name":"maxChars","required":false,"type":"number"},{"description":"Practice part id returned by practice.search_parts.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_read_part","productActionName":"practice.read_part","productCapabilityId":"practice.center","scopes":["question_bank:read"],"sideEffect":"read","title":"Read practice part"},{"auth":"user","destructive":false,"description":"List the user's speaking material library with matched questions and practice history.","input":{"fields":[]},"name":"ielts_speaking_materials_list","productActionName":"speaking_materials.list","productCapabilityId":"speaking.topic_weaver","scopes":["speaking:read"],"sideEffect":"read","title":"List speaking materials"},{"auth":"user","destructive":false,"description":"Create one speaking material. When exact links are omitted, AI matches suitable IELTS speaking questions and adds usable expressions and answer guidance.","input":{"fields":[{"description":"coreStory","name":"coreStory","required":true,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":true,"type":"string"}]},"name":"ielts_speaking_materials_create","productActionName":"speaking_materials.create","productCapabilityId":"speaking.topic_weaver","scopes":["speaking:write"],"sideEffect":"write","title":"Create speaking material"},{"auth":"user","destructive":false,"description":"Update one speaking material. Updating its core content rematches questions and guidance unless exact links are supplied.","input":{"fields":[{"description":"coreStory","name":"coreStory","required":false,"type":"string"},{"description":"questionLinks","name":"questionLinks","required":false,"type":"record[]","fields":[{"description":"answerAngle","name":"answerAngle","required":false,"type":"string"},{"description":"outline","name":"outline","required":false,"type":"unknown[]"},{"description":"questionSlotId","name":"questionSlotId","required":true,"type":"number"},{"description":"requiredAdaptation","name":"requiredAdaptation","required":false,"type":"string"}]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_update","productActionName":"speaking_materials.update","productCapabilityId":"speaking.topic_weaver","scopes":["speaking:write"],"sideEffect":"write","title":"Update speaking material"},{"auth":"user","destructive":true,"description":"Archive one speaking material from the active library.","input":{"fields":[{"description":"id","name":"id","required":true,"type":"number"}]},"name":"ielts_speaking_materials_archive","productActionName":"speaking_materials.archive","productCapabilityId":"speaking.topic_weaver","scopes":["speaking:write"],"sideEffect":"write","title":"Archive speaking material"},{"auth":"user","destructive":false,"description":"Start a browser speaking session for one exact material-question link.","input":{"fields":[{"description":"materialId","name":"materialId","required":true,"type":"number"},{"description":"questionLinkId","name":"questionLinkId","required":true,"type":"number"}]},"name":"ielts_speaking_materials_start_practice","productActionName":"speaking_materials.start_practice","productCapabilityId":"speaking.topic_weaver","scopes":["speaking:practice"],"sideEffect":"write","title":"Start speaking material practice"},{"auth":"user","destructive":false,"description":"Create a cloud practice session for one exact part selected by the local Agent and return its browser launch URL. Never use this tool to ask the server to choose a part.","input":{"fields":[{"description":"Exact IELTS Buddy practice part id selected by the local Agent.","name":"partId","required":true,"type":"number"}]},"name":"ielts_practice_start_session","productActionName":"practice.start_session","productCapabilityId":"practice.center","scopes":["practice:write"],"sideEffect":"write","title":"Start practice session"},{"auth":"user","destructive":false,"description":"Read one owned practice record by its sessionId. It returns the exact record state, scoring summary, timestamps, and browser route, but not question-level answers or review evidence.","input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_practice_read_session","productActionName":"practice.operate_session","productCapabilityId":"practice.center","scopes":["practice:read"],"sideEffect":"read","title":"Read practice session"},{"auth":"user","destructive":false,"description":"Read one submitted Reading or Listening session's stored objective outcomes, answer keys, question prompts, and optionally a bounded original-material snapshot. The server returns facts only; the local Agent locates evidence, classifies errors, and teaches.","input":{"fields":[{"description":"Include a bounded snapshot of the completed part's original material when local evidence analysis needs it.","name":"includeMaterial","required":false,"type":"boolean"},{"description":"Maximum combined characters returned for original material.","name":"maxMaterialChars","required":false,"type":"number"},{"description":"Return only incorrect objective items or all graded objective items.","name":"scope","required":false,"type":"string","values":["incorrect","all"]},{"description":"Submitted Reading or Listening practice session id.","name":"sessionId","required":true,"type":"number"},{"description":"Optional exact question slot keys to review.","name":"slotKeys","required":false,"type":"unknown[]"}]},"name":"ielts_practice_read_review","productActionName":"practice.operate_session","productCapabilityId":"practice.center","scopes":["practice:read"],"sideEffect":"read","title":"Read practice review snapshot"},{"auth":"user","destructive":true,"description":"Submit answers, persist grading, emit the authoritative learning event, and return a compact result.","input":{"fields":[{"description":"Practice or mock session id.","name":"sessionId","required":true,"type":"number"},{"description":"Elapsed duration in seconds.","name":"durationSeconds","required":false,"type":"number"},{"description":"Answer objects with slotKey and answer.","name":"answers","required":false,"type":"record[]","fields":[{"description":"slotKey","name":"slotKey","required":true,"type":"string"},{"description":"answer","name":"answer","required":false,"type":"unknown"}]}]},"name":"ielts_practice_submit_session","productActionName":"practice.operate_session","productCapabilityId":"practice.center","scopes":["practice:write"],"sideEffect":"write","title":"Submit practice session"},{"auth":"user","destructive":false,"description":"List the current user's factual practice records. It supports an Asia/Shanghai date range, subject, type, status, and pagination. Every result exposes sessionId, which can be passed to practice.read_session or practice.read_review; this tool does not recommend or diagnose.","input":{"fields":[{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateFrom","required":false,"type":"string"},{"description":"Optional inclusive local date in YYYY-MM-DD. Explicit dates use the Asia/Shanghai calendar and override timeRange.","name":"dateTo","required":false,"type":"string"},{"description":"Result limit, 1-30.","name":"limit","required":false,"type":"number"},{"description":"Pagination offset returned by the preceding call.","name":"offset","required":false,"type":"number"},{"description":"Optional record type. Empty returns practice and mock records.","name":"sessionType","required":false,"type":"string","values":["","practice","mock"]},{"description":"Optional record status. Empty returns all statuses.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]},{"description":"Optional subject filter. Empty returns every subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing","mock"]},{"description":"Relative record range in the Asia/Shanghai calendar. Ignored when dateFrom or dateTo is supplied.","name":"timeRange","required":false,"type":"string","values":["all","today","yesterday","7d","30d"]}]},"name":"ielts_practice_recent_activity","productActionName":"practice.read_recent_activity","productCapabilityId":"practice.center","scopes":["practice:read"],"sideEffect":"read","title":"Read recent practice activity"},{"auth":"user","destructive":false,"description":"List compact available mock-paper summaries so the agent can recommend one exact paper without creating a session.","input":{"fields":[{"description":"Maximum number of available mock papers to return.","name":"limit","required":false,"type":"number"},{"description":"Maximum duration in minutes. Zero disables the duration filter.","name":"maxDurationMinutes","required":false,"type":"number"},{"description":"Optional required subject.","name":"subject","required":false,"type":"string","values":["","listening","reading","speaking","writing"]}]},"name":"ielts_mock_list_papers","productActionName":"mock.list_papers","productCapabilityId":"mock.center","scopes":["practice:read"],"sideEffect":"read","title":"List mock papers"},{"auth":"user","destructive":false,"description":"Read compact recent mock-session history for the current user, including progress and section-level results.","input":{"fields":[{"description":"Maximum number of recent mock sessions to return.","name":"limit","required":false,"type":"number"},{"description":"Optional mock session status filter.","name":"status","required":false,"type":"string","values":["","in_progress","submitted"]}]},"name":"ielts_mock_recent_activity","productActionName":"mock.read_recent_activity","productCapabilityId":"mock.center","scopes":["practice:read"],"sideEffect":"read","title":"Read recent mock activity"},{"auth":"user","destructive":false,"description":"Import a local Task 1 or Task 2 prompt and essay into the shared writing practice domain, run teacher-style review, and return the browser result URL.","input":{"fields":[{"description":"essay","name":"essay","required":true,"type":"string"},{"description":"prompt","name":"prompt","required":true,"type":"string"},{"description":"targetBand","name":"targetBand","required":false,"type":"number"},{"description":"taskType","name":"taskType","required":true,"type":"string","values":["task1","task2"]},{"description":"title","name":"title","required":false,"type":"string"},{"description":"Required visual facts for Task 1; empty for Task 2.","name":"visualContext","required":false,"type":"string"}]},"name":"ielts_writing_import_submission","productActionName":"writing.import_submission","productCapabilityId":"writing.practice","scopes":["writing:practice","writing:write"],"sideEffect":"write","title":"Import and review writing submission"},{"auth":"user","destructive":false,"description":"Read immutable versions and structured teacher reviews for a saved writing practice that is not the current visible practice page. Current-page questions, drafts, submissions, and reviews use read_current_practice_context.","input":{"fields":[{"description":"sessionId","name":"sessionId","required":true,"type":"number"}]},"name":"ielts_writing_read_practice","productActionName":"writing.read_practice","productCapabilityId":"writing.practice","scopes":["writing:read"],"sideEffect":"read","title":"Read writing practice"},{"auth":"user","destructive":false,"description":"Submit a revised essay as a new immutable version and receive a fresh review with issue resolution evidence.","input":{"fields":[{"description":"answer","name":"answer","required":true,"type":"string"},{"description":"sessionId","name":"sessionId","required":true,"type":"number"},{"description":"slotKey","name":"slotKey","required":true,"type":"string"}]},"name":"ielts_writing_submit_revision","productActionName":"writing.submit_revision","productCapabilityId":"writing.practice","scopes":["writing:practice","writing:write"],"sideEffect":"write","title":"Submit writing revision"},{"auth":"user","destructive":false,"description":"List the authenticated user's unified learning footprint with activity, time-range, search, and pagination filters.","input":{"fields":[{"description":"Activity kinds to include. Empty includes all kinds.","name":"kinds","required":false,"type":"unknown[]"},{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"offset","name":"offset","required":false,"type":"number"},{"description":"Title or description search query.","name":"query","required":false,"type":"string"},{"description":"timeRange","name":"timeRange","required":false,"type":"string","values":["all","today","7d","30d"]}]},"name":"ielts_footprints_list","productActionName":"footprints.list","productCapabilityId":"learner.profile","scopes":["profile:read"],"sideEffect":"read","title":"List learning footprints"},{"auth":"user","destructive":false,"description":"Read the current user's IELTS skill profile and aggregated footprint facts. For a chronological activity list, use footprints.list; for concrete practice records, use practice.recent_activity.","input":{"fields":[{"description":"Optional skill filter.","name":"skill","required":false,"type":"string","values":["","writing","speaking","reading","listening"]}]},"name":"ielts_learner_read_profile","productActionName":"learner.read_profile","productCapabilityId":"learner.profile","scopes":["profile:read"],"sideEffect":"read","title":"Read learner profile"},{"auth":"user","destructive":false,"description":"Pull the authenticated user's authoritative append-only learning events after a cursor for a local mirror or web Agent context.","input":{"fields":[{"description":"cursor","name":"cursor","required":false,"type":"number"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_learning_pull_events","productActionName":"learning.events.pull","productCapabilityId":"learning_events.domain","scopes":["learning:read"],"sideEffect":"read","title":"Pull learning events"},{"auth":"user","destructive":false,"description":"Idempotently append a batch of Agent-owned learning events to the authenticated user's cloud record.","input":{"fields":[{"description":"events","name":"events","required":true,"type":"record[]","fields":[{"description":"deviceId","name":"deviceId","required":true,"type":"string"},{"description":"eventId","name":"eventId","required":true,"type":"string"},{"description":"eventType","name":"eventType","required":true,"type":"string"},{"description":"objectId","name":"objectId","required":false,"type":"string"},{"description":"objectType","name":"objectType","required":false,"type":"string"},{"description":"occurredAt","name":"occurredAt","required":true,"type":"string"},{"description":"payload","name":"payload","required":false,"type":"record"},{"description":"schemaVersion","name":"schemaVersion","required":false,"type":"string","values":["1"]},{"description":"skillCodes","name":"skillCodes","required":false,"type":"unknown[]"},{"description":"subjectCode","name":"subjectCode","required":false,"type":"string","values":["listening","reading","writing","speaking"]}]}]},"name":"ielts_learning_push_events","productActionName":"learning.events.push","productCapabilityId":"learning_events.domain","scopes":["learning:write"],"sideEffect":"write","title":"Push learning events"},{"auth":"user","destructive":false,"description":"List the user's study plans with exact ids, revisions, progress, and latest review so an existing plan can be selected.","input":{"fields":[{"description":"includeFinished","name":"includeFinished","required":false,"type":"boolean"},{"description":"limit","name":"limit","required":false,"type":"number"}]},"name":"ielts_study_plans_list","productActionName":"study_plans.list","productCapabilityId":"study_plans.domain","scopes":["study_plans:read"],"sideEffect":"read","title":"List study plans"},{"auth":"user","destructive":false,"description":"Read one study plan by an exact id returned by the conversation, workspace context, or plan list, including every task and the latest AI review.","input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_get","productActionName":"study_plans.get","productCapabilityId":"study_plans.domain","scopes":["study_plans:read"],"sideEffect":"read","title":"Read study plan"},{"auth":"user","destructive":false,"description":"Create a study plan after its purpose and workable schedule are clear, or create a one-time reminder with an explicit time. Ordinary plans need no prior catalog or course lookup; the planner expands the goal into daily tasks. Use separate blocks only for multiple sessions on each day.","input":{"fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]},"name":"ielts_study_plans_create","productActionName":"study_plans.create","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Create study plan"},{"auth":"user","destructive":false,"description":"Update one exact study-plan revision atomically without creating a second plan. Shorten the plan duration, or replace, add, remove, and move tasks. Use one add_task per independent activity, including multiple tasks on the same day.","input":{"fields":[{"description":"All changes for this user request. Use shorten_plan when reducing the number of study days. Changes are committed atomically.","name":"changes","required":true,"type":"unknown[]"},{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_apply_patch","productActionName":"study_plans.apply_patch","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Apply study plan changes"},{"auth":"user","destructive":false,"description":"Enable, disable, or change task reminders inside an existing study plan. WeChat delivery remains optional per task.","input":{"fields":[{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"tasks","name":"tasks","required":true,"type":"record[]","fields":[{"description":"enabled","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"taskId","name":"taskId","required":true,"type":"number"},{"description":"wechatEnabled","name":"wechatEnabled","required":false,"type":"boolean"}]}]},"name":"ielts_study_plans_configure_reminders","productActionName":"study_plans.configure_reminders","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Configure study plan reminders"},{"auth":"user","destructive":false,"description":"Update a study plan using optimistic revision control.","input":{"fields":[{"description":"acceptanceCriteria","name":"acceptanceCriteria","required":false,"type":"record[]","fields":[{"description":"id","name":"id","required":true,"type":"string"},{"description":"kind","name":"kind","required":false,"type":"string"},{"description":"label","name":"label","required":true,"type":"string"},{"description":"required","name":"required","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["completed_task_count","completed_task_kind","completion_evidence_count"]}]},{"description":"deadline","name":"deadline","required":false,"type":"string"},{"description":"expectedRevision","name":"expectedRevision","required":true,"type":"number"},{"description":"goal","name":"goal","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"title","name":"title","required":false,"type":"string"}]},"name":"ielts_study_plans_update","productActionName":"study_plans.update","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Update study plan"},{"auth":"user","destructive":false,"description":"Atomically replace one exact study-plan revision with a complete new plan. A failed replacement leaves the original plan untouched; repeated Agent execution uses the action idempotency key.","input":{"fields":[{"description":"Exact revision returned when the plan was read.","name":"expectedRevision","required":true,"type":"number"},{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"},{"description":"Complete replacement plan for this request.","name":"replacement","required":true,"type":"record","fields":[{"description":"blocks","name":"blocks","required":false,"type":"record[]","fields":[{"description":"Focus areas assigned to this daily block; multiple values rotate across plan days.","name":"focusAreas","required":true,"type":"unknown[]"},{"description":"Exact duration of this block. Never shorten the user's requested duration.","name":"minutes","required":true,"type":"number"},{"description":"Ordered one-per-day course lesson bindings. Required when focusAreas is exactly [course].","name":"resources","required":false,"type":"record[]","fields":[{"description":"Exact public course id returned by resources.read.","name":"courseId","required":true,"type":"number"},{"description":"Exact linked practice Part id for this lesson.","name":"partId","required":true,"type":"number"},{"description":"User-allocated practice time after the lesson.","name":"practiceMinutes","required":true,"type":"number"},{"description":"Exact active course section id returned by resources.read.","name":"sectionId","required":true,"type":"number"},{"description":"type","name":"type","required":true,"type":"string","values":["course_lesson"]}]},{"description":"Local start time in HH:mm.","name":"startTime","required":true,"type":"string"}]},{"description":"days","name":"days","required":false,"type":"number"},{"description":"First China calendar date in YYYY-MM-DD.","name":"startDate","required":false,"type":"string"},{"description":"includeWeekends","name":"includeWeekends","required":false,"type":"boolean"},{"description":"User-facing study planning goal.","name":"goal","required":true,"type":"string"},{"description":"Use one_time for a single task with an explicit due time; it still belongs to the plan and calendar.","name":"kind","required":false,"type":"string","values":["structured","one_time"]},{"description":"reminder","name":"reminder","required":false,"type":"record","fields":[{"description":"Whether plan tasks should produce reminders.","name":"enabled","required":true,"type":"boolean"},{"description":"offsetMinutes","name":"offsetMinutes","required":false,"type":"unknown"},{"description":"Also deliver through WeChat when the user's global WeChat reminder switch is enabled.","name":"wechatEnabled","required":false,"type":"boolean"}]},{"description":"Optional trusted in-site entry for a one_time task. Use type=practice only for an exact catalog Part the user selected; use type=workspace for a trusted product page. Omit it for manual or external activities.","name":"websiteEntry","required":false,"type":"unknown"},{"description":"User-facing plan title. For one_time plans, use the task name.","name":"title","required":false,"type":"string"},{"description":"Required ISO datetime for one_time plans.","name":"dueAt","required":false,"type":"string"}]}]},"name":"ielts_study_plans_rebuild","productActionName":"study_plans.rebuild","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Rebuild study plan"},{"auth":"user","destructive":true,"description":"Delete a study plan and all tasks that belong to it.","input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"},{"description":"reason","name":"reason","required":true,"type":"string"}]},"name":"ielts_study_plans_delete","productActionName":"study_plans.delete","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Delete study plan"},{"auth":"user","destructive":false,"description":"Update a task that belongs to a study plan, including completion status and due time.","input":{"fields":[{"description":"Updated description.","name":"description","required":false,"type":"string"},{"description":"Updated due datetime.","name":"dueAt","required":false,"type":"string"},{"description":"Updated expiry datetime.","name":"expiresAt","required":false,"type":"string"},{"description":"Task card id.","name":"id","required":true,"type":"number"},{"description":"Updated priority, 0-100.","name":"priority","required":false,"type":"number"},{"description":"Updated status.","name":"status","required":false,"type":"string","values":["pending","visible","started","completed","dismissed","expired"]},{"description":"Updated title.","name":"title","required":false,"type":"string"},{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_update_task","productActionName":"study_plans.update_task","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Update study plan task"},{"auth":"user","destructive":false,"description":"Return the most useful next tasks across active study plans.","input":{"fields":[{"description":"limit","name":"limit","required":false,"type":"number"},{"description":"planId","name":"planId","required":false,"type":"string"}]},"name":"ielts_study_plans_next_actions","productActionName":"study_plans.next_actions","productCapabilityId":"study_plans.domain","scopes":["study_plans:read"],"sideEffect":"read","title":"Read next study actions"},{"auth":"user","destructive":false,"description":"Run AI acceptance review after every task in a study plan is complete.","input":{"fields":[{"description":"planId","name":"planId","required":true,"type":"string"}]},"name":"ielts_study_plans_review","productActionName":"study_plans.review","productCapabilityId":"study_plans.domain","scopes":["study_plans:write"],"sideEffect":"write","title":"Review study plan"}],"runtimeDependencies":{"builtinVocabulary":{"available":false,"enabled":false,"errorCode":null},"coreWorkflows":{"available":true,"workflowIds":["xintong-content-search"]}}}