education-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/PRIVACY.md +53 -0
- package/README.md +144 -0
- package/TERMS.md +57 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +191 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/explain-concept.d.ts +9 -0
- package/dist/tools/explain-concept.d.ts.map +1 -0
- package/dist/tools/explain-concept.js +168 -0
- package/dist/tools/explain-concept.js.map +1 -0
- package/dist/tools/generate-exercise.d.ts +8 -0
- package/dist/tools/generate-exercise.d.ts.map +1 -0
- package/dist/tools/generate-exercise.js +364 -0
- package/dist/tools/generate-exercise.js.map +1 -0
- package/dist/tools/generate-flashcards.d.ts +9 -0
- package/dist/tools/generate-flashcards.d.ts.map +1 -0
- package/dist/tools/generate-flashcards.js +131 -0
- package/dist/tools/generate-flashcards.js.map +1 -0
- package/dist/tools/generate-lesson-plan.d.ts +8 -0
- package/dist/tools/generate-lesson-plan.d.ts.map +1 -0
- package/dist/tools/generate-lesson-plan.js +169 -0
- package/dist/tools/generate-lesson-plan.js.map +1 -0
- package/dist/tools/generate-quiz.d.ts +9 -0
- package/dist/tools/generate-quiz.d.ts.map +1 -0
- package/dist/tools/generate-quiz.js +153 -0
- package/dist/tools/generate-quiz.js.map +1 -0
- package/dist/tools/grade-rubric.d.ts +8 -0
- package/dist/tools/grade-rubric.d.ts.map +1 -0
- package/dist/tools/grade-rubric.js +354 -0
- package/dist/tools/grade-rubric.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +215 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/helpers.d.ts +41 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +134 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper functions for education-mcp tools.
|
|
3
|
+
*/
|
|
4
|
+
import type { DifficultyLevel, AudienceLevel, AgeGroup, QuestionType } from "../types.js";
|
|
5
|
+
/** Get current ISO timestamp. */
|
|
6
|
+
export declare function timestamp(): string;
|
|
7
|
+
/** Clamp a number between min and max. */
|
|
8
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
9
|
+
/** Shuffle an array in-place (Fisher-Yates). Returns same array. */
|
|
10
|
+
export declare function shuffle<T>(arr: T[]): T[];
|
|
11
|
+
/** Pick N random elements from an array (non-destructive). */
|
|
12
|
+
export declare function pickRandom<T>(arr: T[], n: number): T[];
|
|
13
|
+
/** Estimate reading/completion time in minutes. */
|
|
14
|
+
export declare function estimateMinutes(wordCount: number, wordsPerMinute?: number): number;
|
|
15
|
+
/** Map difficulty to a numeric multiplier (for time estimates, complexity, etc.). */
|
|
16
|
+
export declare function difficultyMultiplier(d: DifficultyLevel): number;
|
|
17
|
+
/** Map audience level to approximate vocabulary grade. */
|
|
18
|
+
export declare function audienceGrade(level: AudienceLevel): number;
|
|
19
|
+
/** Map age group to an approximate age range string. */
|
|
20
|
+
export declare function ageGroupLabel(ag: AgeGroup): string;
|
|
21
|
+
/** Validate that a string is non-empty after trimming. */
|
|
22
|
+
export declare function requireNonEmpty(value: string | undefined, fieldName: string): string;
|
|
23
|
+
/** Parse and validate question types. */
|
|
24
|
+
export declare function parseQuestionTypes(types?: QuestionType[]): QuestionType[];
|
|
25
|
+
/** Detect likely subject area from a topic string. */
|
|
26
|
+
export declare function detectSubject(topic: string): string;
|
|
27
|
+
/** Generate Bloom's taxonomy level based on question type / difficulty. */
|
|
28
|
+
export declare function bloomLevel(difficulty: DifficultyLevel): "remember" | "understand" | "apply" | "analyze" | "evaluate" | "create";
|
|
29
|
+
/** Spaced repetition initial values based on difficulty. */
|
|
30
|
+
export declare function initialSR(difficulty: DifficultyLevel): {
|
|
31
|
+
interval_days: number;
|
|
32
|
+
ease_factor: number;
|
|
33
|
+
repetitions: number;
|
|
34
|
+
};
|
|
35
|
+
/** Generate a spaced repetition review schedule (Leitner-style intervals). */
|
|
36
|
+
export declare function reviewSchedule(cardCount: number): string[];
|
|
37
|
+
/** Count words in a string. */
|
|
38
|
+
export declare function wordCount(text: string): number;
|
|
39
|
+
/** Standard 4-point rubric labels. */
|
|
40
|
+
export declare function rubricLabels(scaleLevels: number): string[];
|
|
41
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1F,iCAAiC;AACjC,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,0CAA0C;AAC1C,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAMxC;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAItD;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,SAAM,GAAG,MAAM,CAE/E;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAM/D;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAM1D;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAQlD;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CASzE;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBnD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAM/H;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,UAAU,EAAE,eAAe;;;;EAGpD;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAK1D;AAED,+BAA+B;AAC/B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper functions for education-mcp tools.
|
|
3
|
+
*/
|
|
4
|
+
/** Get current ISO timestamp. */
|
|
5
|
+
export function timestamp() {
|
|
6
|
+
return new Date().toISOString();
|
|
7
|
+
}
|
|
8
|
+
/** Clamp a number between min and max. */
|
|
9
|
+
export function clamp(value, min, max) {
|
|
10
|
+
return Math.max(min, Math.min(max, value));
|
|
11
|
+
}
|
|
12
|
+
/** Shuffle an array in-place (Fisher-Yates). Returns same array. */
|
|
13
|
+
export function shuffle(arr) {
|
|
14
|
+
for (let i = arr.length - 1; i > 0; i--) {
|
|
15
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
16
|
+
[arr[i], arr[j]] = [arr[j], arr[i]];
|
|
17
|
+
}
|
|
18
|
+
return arr;
|
|
19
|
+
}
|
|
20
|
+
/** Pick N random elements from an array (non-destructive). */
|
|
21
|
+
export function pickRandom(arr, n) {
|
|
22
|
+
const copy = [...arr];
|
|
23
|
+
shuffle(copy);
|
|
24
|
+
return copy.slice(0, n);
|
|
25
|
+
}
|
|
26
|
+
/** Estimate reading/completion time in minutes. */
|
|
27
|
+
export function estimateMinutes(wordCount, wordsPerMinute = 200) {
|
|
28
|
+
return Math.max(1, Math.ceil(wordCount / wordsPerMinute));
|
|
29
|
+
}
|
|
30
|
+
/** Map difficulty to a numeric multiplier (for time estimates, complexity, etc.). */
|
|
31
|
+
export function difficultyMultiplier(d) {
|
|
32
|
+
switch (d) {
|
|
33
|
+
case "easy": return 0.7;
|
|
34
|
+
case "medium": return 1.0;
|
|
35
|
+
case "hard": return 1.4;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Map audience level to approximate vocabulary grade. */
|
|
39
|
+
export function audienceGrade(level) {
|
|
40
|
+
switch (level) {
|
|
41
|
+
case "beginner": return 6;
|
|
42
|
+
case "intermediate": return 10;
|
|
43
|
+
case "expert": return 16;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Map age group to an approximate age range string. */
|
|
47
|
+
export function ageGroupLabel(ag) {
|
|
48
|
+
switch (ag) {
|
|
49
|
+
case "elementary": return "ages 6-10";
|
|
50
|
+
case "middle_school": return "ages 11-13";
|
|
51
|
+
case "high_school": return "ages 14-17";
|
|
52
|
+
case "college": return "ages 18-22";
|
|
53
|
+
case "adult": return "ages 23+";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Validate that a string is non-empty after trimming. */
|
|
57
|
+
export function requireNonEmpty(value, fieldName) {
|
|
58
|
+
const trimmed = (value ?? "").trim();
|
|
59
|
+
if (trimmed.length === 0) {
|
|
60
|
+
throw new Error(`${fieldName} is required and cannot be empty.`);
|
|
61
|
+
}
|
|
62
|
+
return trimmed;
|
|
63
|
+
}
|
|
64
|
+
/** Parse and validate question types. */
|
|
65
|
+
export function parseQuestionTypes(types) {
|
|
66
|
+
const all = ["multiple_choice", "true_false", "fill_in_blank"];
|
|
67
|
+
if (!types || types.length === 0)
|
|
68
|
+
return all;
|
|
69
|
+
for (const t of types) {
|
|
70
|
+
if (!all.includes(t)) {
|
|
71
|
+
throw new Error(`Invalid question type: "${t}". Must be one of: ${all.join(", ")}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return types;
|
|
75
|
+
}
|
|
76
|
+
/** Detect likely subject area from a topic string. */
|
|
77
|
+
export function detectSubject(topic) {
|
|
78
|
+
const lower = topic.toLowerCase();
|
|
79
|
+
const patterns = [
|
|
80
|
+
[/\b(math|algebra|geometry|calculus|trigonometry|statistics|arithmetic|equation|quadratic|fraction|decimal|percent)\b/, "Mathematics"],
|
|
81
|
+
[/\b(physics|force|motion|energy|wave|electricity|magnet|gravity|newton|quantum)\b/, "Physics"],
|
|
82
|
+
[/\b(chemistry|element|molecule|atom|reaction|acid|base|compound|periodic)\b/, "Chemistry"],
|
|
83
|
+
[/\b(biology|cell|dna|evolution|ecosystem|organism|photosynthesis|genetics|anatomy)\b/, "Biology"],
|
|
84
|
+
[/\b(history|war|revolution|civilization|empire|ancient|medieval|colonial)\b/, "History"],
|
|
85
|
+
[/\b(english|grammar|literature|writing|poetry|essay|reading|novel|shakespeare)\b/, "English Language Arts"],
|
|
86
|
+
[/\b(geography|continent|ocean|climate|map|country|capital|mountain|river)\b/, "Geography"],
|
|
87
|
+
[/\b(computer|programming|algorithm|code|software|data|network|cyber|sorting|binary|recursive)\b/, "Computer Science"],
|
|
88
|
+
[/\b(art|music|painting|sculpture|composer|instrument|drawing)\b/, "Arts"],
|
|
89
|
+
[/\b(economics|market|supply|demand|gdp|inflation|trade)\b/, "Economics"],
|
|
90
|
+
[/\b(psychology|behavior|cognitive|mental|brain|memory|learning)\b/, "Psychology"],
|
|
91
|
+
[/\b(spanish|french|german|latin|mandarin|language|vocabulary|conjugat)\b/, "World Languages"],
|
|
92
|
+
];
|
|
93
|
+
for (const [regex, subject] of patterns) {
|
|
94
|
+
if (regex.test(lower))
|
|
95
|
+
return subject;
|
|
96
|
+
}
|
|
97
|
+
return "General Studies";
|
|
98
|
+
}
|
|
99
|
+
/** Generate Bloom's taxonomy level based on question type / difficulty. */
|
|
100
|
+
export function bloomLevel(difficulty) {
|
|
101
|
+
switch (difficulty) {
|
|
102
|
+
case "easy": return "remember";
|
|
103
|
+
case "medium": return "apply";
|
|
104
|
+
case "hard": return "analyze";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** Spaced repetition initial values based on difficulty. */
|
|
108
|
+
export function initialSR(difficulty) {
|
|
109
|
+
const ease = difficulty === "easy" ? 2.8 : difficulty === "medium" ? 2.5 : 2.2;
|
|
110
|
+
return { interval_days: 1, ease_factor: ease, repetitions: 0 };
|
|
111
|
+
}
|
|
112
|
+
/** Generate a spaced repetition review schedule (Leitner-style intervals). */
|
|
113
|
+
export function reviewSchedule(cardCount) {
|
|
114
|
+
const baseIntervals = [1, 3, 7, 14, 30, 60, 90];
|
|
115
|
+
return baseIntervals
|
|
116
|
+
.slice(0, Math.min(7, Math.max(3, Math.ceil(cardCount / 3))))
|
|
117
|
+
.map((d) => `Review after ${d} day${d > 1 ? "s" : ""}`);
|
|
118
|
+
}
|
|
119
|
+
/** Count words in a string. */
|
|
120
|
+
export function wordCount(text) {
|
|
121
|
+
return text.trim().split(/\s+/).filter(Boolean).length;
|
|
122
|
+
}
|
|
123
|
+
/** Standard 4-point rubric labels. */
|
|
124
|
+
export function rubricLabels(scaleLevels) {
|
|
125
|
+
if (scaleLevels === 3)
|
|
126
|
+
return ["Beginning", "Developing", "Proficient"];
|
|
127
|
+
if (scaleLevels === 4)
|
|
128
|
+
return ["Beginning", "Developing", "Proficient", "Exemplary"];
|
|
129
|
+
if (scaleLevels === 5)
|
|
130
|
+
return ["Failing", "Beginning", "Developing", "Proficient", "Exemplary"];
|
|
131
|
+
// Generic for other scales
|
|
132
|
+
return Array.from({ length: scaleLevels }, (_, i) => `Level ${i + 1}`);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "education-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AI-powered education tools for teachers and students — quizzes, lesson plans, flashcards, explanations, exercises, and rubrics via MCP",
|
|
5
|
+
"author": "SceneView Tools",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"bin": {
|
|
10
|
+
"education-mcp": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"TERMS.md",
|
|
16
|
+
"PRIVACY.md",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"test:coverage": "vitest run --coverage",
|
|
26
|
+
"prepublishOnly": "npm run build && npm test"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^22.15.2",
|
|
33
|
+
"typescript": "^5.8.3",
|
|
34
|
+
"vitest": "^3.1.1"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"mcp",
|
|
38
|
+
"education",
|
|
39
|
+
"ai",
|
|
40
|
+
"teaching",
|
|
41
|
+
"quiz",
|
|
42
|
+
"flashcards",
|
|
43
|
+
"lesson-plan",
|
|
44
|
+
"rubric",
|
|
45
|
+
"model-context-protocol"
|
|
46
|
+
],
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/mcp-tools-lab/education-mcp.git"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/mcp-tools-lab/education-mcp#readme",
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18"
|
|
54
|
+
}
|
|
55
|
+
}
|