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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/PRIVACY.md +53 -0
  3. package/README.md +144 -0
  4. package/TERMS.md +57 -0
  5. package/dist/index.d.ts +16 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +27 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/server.d.ts +8 -0
  10. package/dist/server.d.ts.map +1 -0
  11. package/dist/server.js +191 -0
  12. package/dist/server.js.map +1 -0
  13. package/dist/tools/explain-concept.d.ts +9 -0
  14. package/dist/tools/explain-concept.d.ts.map +1 -0
  15. package/dist/tools/explain-concept.js +168 -0
  16. package/dist/tools/explain-concept.js.map +1 -0
  17. package/dist/tools/generate-exercise.d.ts +8 -0
  18. package/dist/tools/generate-exercise.d.ts.map +1 -0
  19. package/dist/tools/generate-exercise.js +364 -0
  20. package/dist/tools/generate-exercise.js.map +1 -0
  21. package/dist/tools/generate-flashcards.d.ts +9 -0
  22. package/dist/tools/generate-flashcards.d.ts.map +1 -0
  23. package/dist/tools/generate-flashcards.js +131 -0
  24. package/dist/tools/generate-flashcards.js.map +1 -0
  25. package/dist/tools/generate-lesson-plan.d.ts +8 -0
  26. package/dist/tools/generate-lesson-plan.d.ts.map +1 -0
  27. package/dist/tools/generate-lesson-plan.js +169 -0
  28. package/dist/tools/generate-lesson-plan.js.map +1 -0
  29. package/dist/tools/generate-quiz.d.ts +9 -0
  30. package/dist/tools/generate-quiz.d.ts.map +1 -0
  31. package/dist/tools/generate-quiz.js +153 -0
  32. package/dist/tools/generate-quiz.js.map +1 -0
  33. package/dist/tools/grade-rubric.d.ts +8 -0
  34. package/dist/tools/grade-rubric.d.ts.map +1 -0
  35. package/dist/tools/grade-rubric.js +354 -0
  36. package/dist/tools/grade-rubric.js.map +1 -0
  37. package/dist/tools/index.d.ts +7 -0
  38. package/dist/tools/index.d.ts.map +1 -0
  39. package/dist/tools/index.js +7 -0
  40. package/dist/tools/index.js.map +1 -0
  41. package/dist/types.d.ts +215 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +9 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/utils/helpers.d.ts +41 -0
  46. package/dist/utils/helpers.d.ts.map +1 -0
  47. package/dist/utils/helpers.js +134 -0
  48. package/dist/utils/helpers.js.map +1 -0
  49. package/dist/utils/index.d.ts +2 -0
  50. package/dist/utils/index.d.ts.map +1 -0
  51. package/dist/utils/index.js +2 -0
  52. package/dist/utils/index.js.map +1 -0
  53. package/package.json +55 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SceneView Tools
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/PRIVACY.md ADDED
@@ -0,0 +1,53 @@
1
+ # Privacy Policy — education-mcp
2
+
3
+ **Effective date:** March 26, 2026
4
+ **Provider:** SceneView Tools
5
+
6
+ ## 1. Overview
7
+
8
+ The `education-mcp` MCP server processes educational content generation requests locally. This policy describes how we handle data.
9
+
10
+ ## 2. Data We Process
11
+
12
+ When you use the Service, we process:
13
+ - **Input parameters:** Topic names, subject areas, difficulty levels, and other configuration you provide to generate content.
14
+ - **No personal data required:** The Service does not require or collect personal information such as names, email addresses, student records, or institutional data.
15
+
16
+ ## 3. Data We Do NOT Collect
17
+
18
+ - We do NOT collect student personally identifiable information (PII).
19
+ - We do NOT store input parameters or generated content.
20
+ - We do NOT use cookies or tracking mechanisms.
21
+ - We do NOT sell or share any data with third parties.
22
+ - We do NOT collect analytics or usage telemetry in the open-source version.
23
+
24
+ ## 4. Data Processing
25
+
26
+ - All content generation happens locally on your machine or infrastructure.
27
+ - No data is transmitted to external servers in the open-source version.
28
+ - The Pro tier API may process requests server-side; in that case, inputs are processed in memory only and not stored after response delivery.
29
+
30
+ ## 5. FERPA / COPPA / GDPR Compliance
31
+
32
+ - The Service is designed to be compatible with FERPA requirements as it does not process student education records.
33
+ - The Service does not knowingly collect data from children under 13 (COPPA).
34
+ - For GDPR: no personal data is collected or processed. The Service operates as a local tool.
35
+
36
+ ## 6. Third-Party Services
37
+
38
+ The open-source version of this Service makes no external API calls. The Pro tier may use:
39
+ - Stripe for payment processing (subject to [Stripe's Privacy Policy](https://stripe.com/privacy)).
40
+
41
+ ## 7. Security
42
+
43
+ - The Service runs as a local MCP server with no network exposure by default.
44
+ - No credentials, tokens, or secrets are stored.
45
+ - The source code is open for security audit under the MIT license.
46
+
47
+ ## 8. Changes
48
+
49
+ We may update this policy as the Service evolves. Changes will be noted in the repository's changelog.
50
+
51
+ ## 9. Contact
52
+
53
+ For privacy questions: open an issue at https://github.com/mcp-tools-lab/education-mcp/issues
package/README.md ADDED
@@ -0,0 +1,144 @@
1
+ # education-mcp
2
+
3
+ AI-powered education tools for teachers and students via the [Model Context Protocol](https://modelcontextprotocol.io).
4
+
5
+ Generate quizzes, lesson plans, flashcards, concept explanations, exercises, and grading rubrics — all from your AI assistant.
6
+
7
+ ## Tools
8
+
9
+ | Tool | Description |
10
+ |---|---|
11
+ | `generate_quiz` | Multiple choice, true/false, and fill-in-blank quizzes from any topic |
12
+ | `generate_lesson_plan` | Structured lesson plans with Bloom's taxonomy objectives, timed activities, assessment, and differentiation |
13
+ | `generate_flashcards` | Spaced repetition flashcard decks with hints, tags, and Leitner review schedules |
14
+ | `explain_concept` | Age-appropriate explanations at beginner/intermediate/expert levels with analogies and examples |
15
+ | `generate_exercise` | Math, physics, chemistry, biology, and CS exercises with step-by-step solutions |
16
+ | `grade_rubric` | Grading rubrics for essays, presentations, projects, lab reports, and code assignments |
17
+
18
+ ## Quick Start
19
+
20
+ ### With Claude Desktop
21
+
22
+ Add to your `claude_desktop_config.json`:
23
+
24
+ ```json
25
+ {
26
+ "mcpServers": {
27
+ "education": {
28
+ "command": "npx",
29
+ "args": ["-y", "education-mcp"]
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ ### With any MCP client
36
+
37
+ ```bash
38
+ npx education-mcp
39
+ ```
40
+
41
+ ## Examples
42
+
43
+ ### Generate a Quiz
44
+
45
+ ```
46
+ generate_quiz({
47
+ topic: "photosynthesis",
48
+ question_count: 10,
49
+ question_types: ["multiple_choice", "true_false"],
50
+ difficulty: "medium"
51
+ })
52
+ ```
53
+
54
+ ### Create a Lesson Plan
55
+
56
+ ```
57
+ generate_lesson_plan({
58
+ topic: "fractions",
59
+ subject: "Mathematics",
60
+ grade_level: "5th grade",
61
+ duration_minutes: 45,
62
+ include_homework: true
63
+ })
64
+ ```
65
+
66
+ ### Make Flashcards
67
+
68
+ ```
69
+ generate_flashcards({
70
+ topic: "Spanish irregular verbs",
71
+ card_count: 20,
72
+ difficulty: "medium",
73
+ include_hints: true
74
+ })
75
+ ```
76
+
77
+ ### Explain a Concept
78
+
79
+ ```
80
+ explain_concept({
81
+ concept: "gravity",
82
+ level: "beginner",
83
+ age_group: "elementary",
84
+ include_analogy: true
85
+ })
86
+ ```
87
+
88
+ ### Generate Exercises
89
+
90
+ ```
91
+ generate_exercise({
92
+ topic: "kinematics",
93
+ subject: "physics",
94
+ exercise_count: 5,
95
+ difficulty: "hard",
96
+ show_steps: true
97
+ })
98
+ ```
99
+
100
+ ### Create a Grading Rubric
101
+
102
+ ```
103
+ grade_rubric({
104
+ assignment_title: "Research Paper on Climate Change",
105
+ assignment_type: "essay",
106
+ total_points: 100,
107
+ scale_levels: 4
108
+ })
109
+ ```
110
+
111
+ ## Pricing
112
+
113
+ | | Free | Pro ($9.99/month) |
114
+ |---|---|---|
115
+ | Calls per month | 30 | Unlimited |
116
+ | All 6 tools | Yes | Yes |
117
+ | Custom templates | No | Yes |
118
+ | Priority generation | No | Yes |
119
+
120
+ ## Development
121
+
122
+ ```bash
123
+ npm install
124
+ npm run build
125
+ npm test
126
+ ```
127
+
128
+ ### Run tests
129
+
130
+ ```bash
131
+ npm test # single run
132
+ npm run test:watch # watch mode
133
+ npm run test:coverage # with coverage
134
+ ```
135
+
136
+ ## Disclaimer
137
+
138
+ This tool generates educational content for reference purposes. Teachers should review all generated content before classroom use. This is not a substitute for professional curriculum development.
139
+
140
+ ## License
141
+
142
+ MIT - SceneView Tools
143
+
144
+ See [TERMS.md](TERMS.md) and [PRIVACY.md](PRIVACY.md) for full legal details.
package/TERMS.md ADDED
@@ -0,0 +1,57 @@
1
+ # Terms of Service — education-mcp
2
+
3
+ **Effective date:** March 26, 2026
4
+ **Provider:** SceneView Tools
5
+
6
+ ## 1. Acceptance
7
+
8
+ By using the `education-mcp` MCP server ("Service"), you agree to these Terms of Service.
9
+
10
+ ## 2. Description
11
+
12
+ The Service provides AI-assisted education tools including quiz generation, lesson planning, flashcard creation, concept explanation, exercise generation, and rubric creation via the Model Context Protocol (MCP).
13
+
14
+ ## 3. Educational Disclaimer
15
+
16
+ **This Service generates educational content for reference purposes only.**
17
+
18
+ - All generated content should be reviewed by a qualified educator before use in classrooms.
19
+ - The Service is not a substitute for professional curriculum development, instructional design, or pedagogical expertise.
20
+ - Generated assessments, rubrics, and exercises are starting points and should be adapted to specific student needs, local standards, and institutional requirements.
21
+ - The Service does not guarantee the accuracy, completeness, or appropriateness of any generated content.
22
+
23
+ ## 4. Pricing
24
+
25
+ - **Free tier:** 30 calls per month across all tools.
26
+ - **Pro tier:** $9.99/month for unlimited calls with enhanced features.
27
+ - Pricing is subject to change with 30 days notice.
28
+
29
+ ## 5. Acceptable Use
30
+
31
+ You agree NOT to:
32
+ - Use the Service to generate content that promotes harm, discrimination, or misinformation.
33
+ - Redistribute generated content as your own proprietary curriculum without review and adaptation.
34
+ - Attempt to circumvent rate limits or access controls.
35
+ - Use the Service for automated scraping or bulk content generation for resale.
36
+
37
+ ## 6. Intellectual Property
38
+
39
+ - Generated content is provided for your use and may be freely modified and distributed.
40
+ - The Service's source code is licensed under MIT.
41
+ - You retain all rights to content you create by modifying or building upon generated output.
42
+
43
+ ## 7. Privacy
44
+
45
+ See our [Privacy Policy](PRIVACY.md) for information about data handling.
46
+
47
+ ## 8. Limitation of Liability
48
+
49
+ THE SERVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN NO EVENT SHALL THE PROVIDER BE LIABLE FOR ANY DAMAGES ARISING FROM THE USE OF GENERATED EDUCATIONAL CONTENT, INCLUDING BUT NOT LIMITED TO INACCURATE ASSESSMENT ITEMS, INAPPROPRIATE DIFFICULTY LEVELS, OR PEDAGOGICAL UNSUITABILITY.
50
+
51
+ ## 9. Changes
52
+
53
+ We may update these Terms at any time. Continued use after changes constitutes acceptance.
54
+
55
+ ## 10. Contact
56
+
57
+ For questions: open an issue at https://github.com/mcp-tools-lab/education-mcp/issues
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * education-mcp — AI-powered education tools via MCP.
4
+ *
5
+ * Tools: generate_quiz, generate_lesson_plan, generate_flashcards,
6
+ * explain_concept, generate_exercise, grade_rubric
7
+ *
8
+ * Author: SceneView Tools
9
+ * License: MIT
10
+ *
11
+ * DISCLAIMER: This tool generates educational content for reference purposes.
12
+ * Teachers should review all generated content before use in classrooms.
13
+ * This is not a substitute for professional curriculum development.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * education-mcp — AI-powered education tools via MCP.
4
+ *
5
+ * Tools: generate_quiz, generate_lesson_plan, generate_flashcards,
6
+ * explain_concept, generate_exercise, grade_rubric
7
+ *
8
+ * Author: SceneView Tools
9
+ * License: MIT
10
+ *
11
+ * DISCLAIMER: This tool generates educational content for reference purposes.
12
+ * Teachers should review all generated content before use in classrooms.
13
+ * This is not a substitute for professional curriculum development.
14
+ */
15
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
16
+ import { createServer } from "./server.js";
17
+ async function main() {
18
+ const server = createServer();
19
+ const transport = new StdioServerTransport();
20
+ await server.connect(transport);
21
+ console.error("education-mcp server started on stdio");
22
+ }
23
+ main().catch((err) => {
24
+ console.error("Fatal error:", err);
25
+ process.exit(1);
26
+ });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Server for education-mcp.
3
+ *
4
+ * Registers all 6 education tools and exposes them via the Model Context Protocol.
5
+ */
6
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function createServer(): McpServer;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAepE,wBAAgB,YAAY,IAAI,SAAS,CA8NxC"}
package/dist/server.js ADDED
@@ -0,0 +1,191 @@
1
+ /**
2
+ * MCP Server for education-mcp.
3
+ *
4
+ * Registers all 6 education tools and exposes them via the Model Context Protocol.
5
+ */
6
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { z } from "zod";
8
+ import { generateQuiz, generateLessonPlan, generateFlashcards, explainConcept, generateExercise, gradeRubric, } from "./tools/index.js";
9
+ import { RATE_LIMITS } from "./types.js";
10
+ // Re-export zod from the SDK for schema definitions
11
+ // The MCP SDK bundles zod, so we use it from there.
12
+ export function createServer() {
13
+ const server = new McpServer({
14
+ name: "education-mcp",
15
+ version: "1.0.0",
16
+ description: "AI-powered education tools for teachers and students. Generate quizzes, lesson plans, flashcards, concept explanations, exercises, and grading rubrics.",
17
+ });
18
+ // ── generate_quiz ──────────────────────────────────────────────────────────
19
+ server.tool("generate_quiz", "Create a quiz from a topic with multiple choice, true/false, and fill-in-blank questions. Perfect for formative assessment, test prep, and homework.", {
20
+ topic: z.string().min(1).describe("The topic to generate questions about (e.g., 'photosynthesis', 'World War II', 'quadratic equations')"),
21
+ question_count: z.number().int().min(1).max(50).optional().describe("Number of questions (default: 5, max: 50)"),
22
+ question_types: z
23
+ .array(z.enum(["multiple_choice", "true_false", "fill_in_blank"]))
24
+ .optional()
25
+ .describe("Types of questions to include (default: all three)"),
26
+ difficulty: z.enum(["easy", "medium", "hard"]).optional().describe("Difficulty level (default: medium)"),
27
+ subject: z.string().optional().describe("Subject area (auto-detected if omitted)"),
28
+ age_group: z
29
+ .enum(["elementary", "middle_school", "high_school", "college", "adult"])
30
+ .optional()
31
+ .describe("Target age group (default: inferred from difficulty)"),
32
+ }, async (args) => {
33
+ try {
34
+ const result = generateQuiz(args);
35
+ return {
36
+ content: [
37
+ {
38
+ type: "text",
39
+ text: JSON.stringify(result, null, 2),
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ catch (err) {
45
+ return {
46
+ content: [{ type: "text", text: `Error: ${err.message}` }],
47
+ isError: true,
48
+ };
49
+ }
50
+ });
51
+ // ── generate_lesson_plan ───────────────────────────────────────────────────
52
+ server.tool("generate_lesson_plan", "Create a structured lesson plan with learning objectives (Bloom's taxonomy), timed activities, assessment strategies, and differentiation. Follows the Madeline Hunter model.", {
53
+ topic: z.string().min(1).describe("Lesson topic (e.g., 'fractions', 'the water cycle')"),
54
+ subject: z.string().min(1).describe("Subject area (e.g., 'Mathematics', 'Science')"),
55
+ grade_level: z.string().min(1).describe("Grade level (e.g., '5th grade', 'AP Biology')"),
56
+ duration_minutes: z.number().int().min(15).max(180).optional().describe("Lesson duration in minutes (default: 45)"),
57
+ objectives_count: z.number().int().min(1).max(6).optional().describe("Number of learning objectives (default: 3)"),
58
+ include_standards: z.boolean().optional().describe("Include standards alignment (default: true)"),
59
+ include_homework: z.boolean().optional().describe("Include homework assignment (default: false)"),
60
+ }, async (args) => {
61
+ try {
62
+ const result = generateLessonPlan(args);
63
+ return {
64
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
65
+ };
66
+ }
67
+ catch (err) {
68
+ return {
69
+ content: [{ type: "text", text: `Error: ${err.message}` }],
70
+ isError: true,
71
+ };
72
+ }
73
+ });
74
+ // ── generate_flashcards ────────────────────────────────────────────────────
75
+ server.tool("generate_flashcards", "Create a spaced repetition flashcard deck from a topic. Cards include front/back, optional hints, difficulty tags, and a review schedule based on the Leitner system.", {
76
+ topic: z.string().min(1).describe("Topic for the flashcard deck (e.g., 'Spanish vocabulary', 'cell biology')"),
77
+ card_count: z.number().int().min(1).max(100).optional().describe("Number of flashcards (default: 10, max: 100)"),
78
+ difficulty: z.enum(["easy", "medium", "hard"]).optional().describe("Maximum difficulty level (default: medium)"),
79
+ include_hints: z.boolean().optional().describe("Include study hints on cards (default: true)"),
80
+ tags: z.array(z.string()).optional().describe("Custom tags for organizing cards"),
81
+ }, async (args) => {
82
+ try {
83
+ const result = generateFlashcards(args);
84
+ return {
85
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
86
+ };
87
+ }
88
+ catch (err) {
89
+ return {
90
+ content: [{ type: "text", text: `Error: ${err.message}` }],
91
+ isError: true,
92
+ };
93
+ }
94
+ });
95
+ // ── explain_concept ────────────────────────────────────────────────────────
96
+ server.tool("explain_concept", "Explain a concept at different levels (beginner/intermediate/expert) and for different age groups. Includes analogies, examples, prerequisites, and common misconceptions.", {
97
+ concept: z.string().min(1).describe("The concept to explain (e.g., 'gravity', 'photosynthesis', 'machine learning')"),
98
+ level: z.enum(["beginner", "intermediate", "expert"]).optional().describe("Explanation depth (default: beginner)"),
99
+ age_group: z
100
+ .enum(["elementary", "middle_school", "high_school", "college", "adult"])
101
+ .optional()
102
+ .describe("Target age group for vocabulary and examples (default: high_school)"),
103
+ include_analogy: z.boolean().optional().describe("Include a relatable analogy (default: true)"),
104
+ include_examples: z.boolean().optional().describe("Include practical examples (default: true)"),
105
+ max_length: z.number().int().min(50).max(2000).optional().describe("Maximum word count (default: 500)"),
106
+ }, async (args) => {
107
+ try {
108
+ const result = explainConcept(args);
109
+ return {
110
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
111
+ };
112
+ }
113
+ catch (err) {
114
+ return {
115
+ content: [{ type: "text", text: `Error: ${err.message}` }],
116
+ isError: true,
117
+ };
118
+ }
119
+ });
120
+ // ── generate_exercise ──────────────────────────────────────────────────────
121
+ server.tool("generate_exercise", "Generate math, physics, chemistry, biology, or computer science exercises with step-by-step solutions, hints, and common mistakes. Great for homework and practice sets.", {
122
+ topic: z.string().min(1).describe("Exercise topic (e.g., 'linear equations', 'kinematics', 'DNA replication')"),
123
+ subject: z
124
+ .enum(["math", "physics", "chemistry", "biology", "computer_science"])
125
+ .describe("Subject area for the exercises"),
126
+ exercise_count: z.number().int().min(1).max(20).optional().describe("Number of exercises (default: 3, max: 20)"),
127
+ difficulty: z.enum(["easy", "medium", "hard"]).optional().describe("Difficulty level (default: medium)"),
128
+ include_hints: z.boolean().optional().describe("Include hints for each exercise (default: true)"),
129
+ show_steps: z.boolean().optional().describe("Show step-by-step solutions (default: true)"),
130
+ }, async (args) => {
131
+ try {
132
+ const result = generateExercise(args);
133
+ return {
134
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
135
+ };
136
+ }
137
+ catch (err) {
138
+ return {
139
+ content: [{ type: "text", text: `Error: ${err.message}` }],
140
+ isError: true,
141
+ };
142
+ }
143
+ });
144
+ // ── grade_rubric ───────────────────────────────────────────────────────────
145
+ server.tool("grade_rubric", "Create a detailed grading rubric for an assignment. Supports essays, presentations, projects, lab reports, and code assignments. Rubrics include weighted criteria with level descriptors.", {
146
+ assignment_title: z.string().min(1).describe("Title of the assignment (e.g., 'Research Paper on Climate Change')"),
147
+ assignment_type: z
148
+ .enum(["essay", "presentation", "project", "lab_report", "code"])
149
+ .describe("Type of assignment"),
150
+ criteria_count: z.number().int().min(2).max(10).optional().describe("Number of grading criteria (default: 4)"),
151
+ total_points: z.number().int().min(10).max(1000).optional().describe("Total points possible (default: 100)"),
152
+ scale_levels: z.number().int().min(3).max(6).optional().describe("Number of performance levels (default: 4, e.g., Beginning/Developing/Proficient/Exemplary)"),
153
+ subject: z.string().optional().describe("Subject area for context-specific criteria"),
154
+ }, async (args) => {
155
+ try {
156
+ const result = gradeRubric(args);
157
+ return {
158
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
159
+ };
160
+ }
161
+ catch (err) {
162
+ return {
163
+ content: [{ type: "text", text: `Error: ${err.message}` }],
164
+ isError: true,
165
+ };
166
+ }
167
+ });
168
+ // ── Pricing resource ───────────────────────────────────────────────────────
169
+ server.resource("pricing", "education://pricing", async () => ({
170
+ contents: [
171
+ {
172
+ uri: "education://pricing",
173
+ mimeType: "application/json",
174
+ text: JSON.stringify({
175
+ free_tier: {
176
+ calls_per_month: RATE_LIMITS.freeMonthlyLimit,
177
+ features: "All 6 tools with standard output",
178
+ },
179
+ pro_tier: {
180
+ price_usd: RATE_LIMITS.proPriceUsd,
181
+ period: "month",
182
+ calls_per_month: "unlimited",
183
+ features: "All 6 tools, priority generation, extended output, custom templates",
184
+ },
185
+ }),
186
+ },
187
+ ],
188
+ }));
189
+ return server;
190
+ }
191
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * explain_concept — Explain a concept at different audience levels and age groups.
3
+ *
4
+ * Generates structured explanations with analogies, examples, prerequisites,
5
+ * and common misconceptions.
6
+ */
7
+ import type { ExplainConceptInput, ConceptExplanation } from "../types.js";
8
+ export declare function explainConcept(input: ExplainConceptInput): ConceptExplanation;
9
+ //# sourceMappingURL=explain-concept.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-concept.d.ts","sourceRoot":"","sources":["../../src/tools/explain-concept.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,aAAa,CAAC;AAwIrB,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,kBAAkB,CAgD7E"}