get_progress
Track certification study progress by viewing mastery levels, accuracy metrics, and review status for exam preparation.
Instructions
Get your certification study progress overview including mastery levels, accuracy, and review status.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/get-progress.ts:11-47 (handler)The handler logic for the get_progress tool, which computes and returns study progress metrics.
server.tool( 'get_progress', 'Get your certification study progress overview including mastery levels, accuracy, and review status.', {}, async () => { const userId = userConfig.userId; ensureUser(db, userId); const curriculum = loadCurriculum(); const mastery = getAllMastery(db, userId); const stats = getTotalStats(db, userId); const overdueReviews = getOverdueReviews(db, userId); const domainProgress = curriculum.domains.map(d => { const domainMastery = mastery.filter(m => m.domainId === d.id); const avgAccuracy = domainMastery.length > 0 ? Math.round(domainMastery.reduce((sum, m) => sum + m.accuracyPercent, 0) / domainMastery.length) : 0; const masteredCount = domainMastery.filter(m => m.masteryLevel === 'mastered').length; return ` D${d.id}: ${d.title} — ${avgAccuracy}% accuracy, ${masteredCount}/${d.taskStatements.length} mastered`; }); const overallAccuracy = stats.total > 0 ? Math.round((stats.correct / stats.total) * 100) : 0; const text = [ '═══ CERTIFICATION STUDY PROGRESS ═══', '', `Questions Answered: ${stats.total}`, `Overall Accuracy: ${overallAccuracy}%`, `Reviews Due: ${overdueReviews.length}`, '', 'Domain Progress:', ...domainProgress, ].join('\n'); return { content: [{ type: 'text' as const, text }] }; } ); - src/tools/get-progress.ts:10-48 (registration)The function that registers the get_progress tool with the McpServer.
export function registerGetProgress(server: McpServer, db: Database.Database, userConfig: UserConfig): void { server.tool( 'get_progress', 'Get your certification study progress overview including mastery levels, accuracy, and review status.', {}, async () => { const userId = userConfig.userId; ensureUser(db, userId); const curriculum = loadCurriculum(); const mastery = getAllMastery(db, userId); const stats = getTotalStats(db, userId); const overdueReviews = getOverdueReviews(db, userId); const domainProgress = curriculum.domains.map(d => { const domainMastery = mastery.filter(m => m.domainId === d.id); const avgAccuracy = domainMastery.length > 0 ? Math.round(domainMastery.reduce((sum, m) => sum + m.accuracyPercent, 0) / domainMastery.length) : 0; const masteredCount = domainMastery.filter(m => m.masteryLevel === 'mastered').length; return ` D${d.id}: ${d.title} — ${avgAccuracy}% accuracy, ${masteredCount}/${d.taskStatements.length} mastered`; }); const overallAccuracy = stats.total > 0 ? Math.round((stats.correct / stats.total) * 100) : 0; const text = [ '═══ CERTIFICATION STUDY PROGRESS ═══', '', `Questions Answered: ${stats.total}`, `Overall Accuracy: ${overallAccuracy}%`, `Reviews Due: ${overdueReviews.length}`, '', 'Domain Progress:', ...domainProgress, ].join('\n'); return { content: [{ type: 'text' as const, text }] }; } ); }