get_study_plan
Generate a personalized study plan for the Claude Certified Architect exam based on assessment results and weak areas, then create a checklist to track progress.
Instructions
Get a personalized study plan based on your assessment results, weak areas, and learning path.
IMPORTANT — after showing the study plan, use AskUserQuestion with header "Focus" and multiSelect: true to let the user pick which domains they want to focus on. Options should be the 5 domains with their current mastery as descriptions. Then use their selection to filter get_practice_question calls.
Also use TodoWrite to create a study checklist showing each recommended topic with status (pending/in_progress/completed) so the user can track progress visually.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/get-study-plan.ts:21-62 (handler)The handler function for 'get_study_plan' that calculates the personalized study plan, retrieves mastery data, overdue reviews, and recommends the next domain.
async () => { const userId = userConfig.userId; ensureUser(db, userId); const user = getUser(db, userId); const curriculum = loadCurriculum(); const mastery = getAllMastery(db, userId); const overdueReviews = getOverdueReviews(db, userId); const stats = getTotalStats(db, userId); const allQuestions = loadQuestions(); const path = user?.learningPath ?? 'beginner-friendly'; const masteryByDomain = new Map<number, typeof mastery>(); for (const m of mastery) { const existing = masteryByDomain.get(m.domainId) ?? []; masteryByDomain.set(m.domainId, [...existing, m]); } const nextDomain = getNextRecommendedDomain(path as any, masteryByDomain); const domainOrder = getDomainOrder(path as any); const timeEstimate = estimateTimeRemaining(allQuestions.length, stats.total); const domain = curriculum.domains.find(d => d.id === nextDomain); const lines = [ '═══ YOUR STUDY PLAN ═══', '', `Learning Path: ${path}`, `Estimated Time Remaining: ${timeEstimate}`, '', `Next Recommended Domain: D${nextDomain} — ${domain?.title ?? 'Unknown'}`, '', 'Domain Study Order:', ...domainOrder.map((id, i) => { const d = curriculum.domains.find(x => x.id === id); return ` ${i + 1}. D${id}: ${d?.title ?? 'Unknown'}`; }), '', `Reviews Due: ${overdueReviews.length}`, overdueReviews.length > 0 ? 'Start with your overdue reviews before new material.' : '', ]; return { content: [{ type: 'text' as const, text: lines.join('\n') }] }; } - src/tools/get-study-plan.ts:12-64 (registration)The registration function that defines the 'get_study_plan' tool within the MCP server, providing the name, description, and handler.
export function registerGetStudyPlan(server: McpServer, db: Database.Database, userConfig: UserConfig): void { server.tool( 'get_study_plan', `Get a personalized study plan based on your assessment results, weak areas, and learning path. IMPORTANT — after showing the study plan, use AskUserQuestion with header "Focus" and multiSelect: true to let the user pick which domains they want to focus on. Options should be the 5 domains with their current mastery as descriptions. Then use their selection to filter get_practice_question calls. Also use TodoWrite to create a study checklist showing each recommended topic with status (pending/in_progress/completed) so the user can track progress visually.`, {}, async () => { const userId = userConfig.userId; ensureUser(db, userId); const user = getUser(db, userId); const curriculum = loadCurriculum(); const mastery = getAllMastery(db, userId); const overdueReviews = getOverdueReviews(db, userId); const stats = getTotalStats(db, userId); const allQuestions = loadQuestions(); const path = user?.learningPath ?? 'beginner-friendly'; const masteryByDomain = new Map<number, typeof mastery>(); for (const m of mastery) { const existing = masteryByDomain.get(m.domainId) ?? []; masteryByDomain.set(m.domainId, [...existing, m]); } const nextDomain = getNextRecommendedDomain(path as any, masteryByDomain); const domainOrder = getDomainOrder(path as any); const timeEstimate = estimateTimeRemaining(allQuestions.length, stats.total); const domain = curriculum.domains.find(d => d.id === nextDomain); const lines = [ '═══ YOUR STUDY PLAN ═══', '', `Learning Path: ${path}`, `Estimated Time Remaining: ${timeEstimate}`, '', `Next Recommended Domain: D${nextDomain} — ${domain?.title ?? 'Unknown'}`, '', 'Domain Study Order:', ...domainOrder.map((id, i) => { const d = curriculum.domains.find(x => x.id === id); return ` ${i + 1}. D${id}: ${d?.title ?? 'Unknown'}`; }), '', `Reviews Due: ${overdueReviews.length}`, overdueReviews.length > 0 ? 'Start with your overdue reviews before new material.' : '', ]; return { content: [{ type: 'text' as const, text: lines.join('\n') }] }; } ); }