@graspful/mcp 0.1.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.
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CourseYamlSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const ContentBlockYamlSchema = zod_1.z.discriminatedUnion('type', [
6
+ zod_1.z.object({
7
+ type: zod_1.z.literal('image'),
8
+ url: zod_1.z.string().min(1),
9
+ alt: zod_1.z.string().min(1),
10
+ caption: zod_1.z.string().optional(),
11
+ width: zod_1.z.number().int().positive().optional(),
12
+ }),
13
+ zod_1.z.object({
14
+ type: zod_1.z.literal('video'),
15
+ url: zod_1.z.string().min(1),
16
+ title: zod_1.z.string().min(1),
17
+ caption: zod_1.z.string().optional(),
18
+ }),
19
+ zod_1.z.object({
20
+ type: zod_1.z.literal('link'),
21
+ url: zod_1.z.string().min(1),
22
+ title: zod_1.z.string().min(1),
23
+ description: zod_1.z.string().optional(),
24
+ }),
25
+ zod_1.z.object({
26
+ type: zod_1.z.literal('callout'),
27
+ title: zod_1.z.string().min(1),
28
+ body: zod_1.z.string().min(1),
29
+ }),
30
+ ]);
31
+ const ProblemYamlSchema = zod_1.z.object({
32
+ id: zod_1.z.string(),
33
+ type: zod_1.z.enum([
34
+ 'multiple_choice',
35
+ 'fill_blank',
36
+ 'true_false',
37
+ 'ordering',
38
+ 'matching',
39
+ 'scenario',
40
+ ]),
41
+ question: zod_1.z.string(),
42
+ options: zod_1.z.array(zod_1.z.string()).optional(),
43
+ correct: zod_1.z.union([zod_1.z.number(), zod_1.z.string()]),
44
+ explanation: zod_1.z.string().optional(),
45
+ difficulty: zod_1.z.number().int().min(1).max(5).optional(),
46
+ });
47
+ const KnowledgePointYamlSchema = zod_1.z.object({
48
+ id: zod_1.z.string(),
49
+ instruction: zod_1.z.string().optional(),
50
+ instructionContent: zod_1.z.array(ContentBlockYamlSchema).optional().default([]),
51
+ workedExample: zod_1.z.string().optional(),
52
+ workedExampleContent: zod_1.z.array(ContentBlockYamlSchema).optional().default([]),
53
+ problems: zod_1.z.array(ProblemYamlSchema).optional().default([]),
54
+ });
55
+ const EncompassingRefSchema = zod_1.z.object({
56
+ concept: zod_1.z.string(),
57
+ weight: zod_1.z.number().min(0).max(1),
58
+ });
59
+ const ConceptYamlSchema = zod_1.z.object({
60
+ id: zod_1.z.string(),
61
+ name: zod_1.z.string(),
62
+ section: zod_1.z.string().optional(),
63
+ difficulty: zod_1.z.number().int().min(1).max(10),
64
+ estimatedMinutes: zod_1.z.number().int().positive(),
65
+ tags: zod_1.z.array(zod_1.z.string()).default([]),
66
+ sourceRef: zod_1.z.string().optional(),
67
+ prerequisites: zod_1.z.array(zod_1.z.string()).optional().default([]),
68
+ encompassing: zod_1.z.array(EncompassingRefSchema).optional().default([]),
69
+ knowledgePoints: zod_1.z.array(KnowledgePointYamlSchema).optional().default([]),
70
+ });
71
+ const SectionExamBlueprintYamlSchema = zod_1.z.object({
72
+ conceptId: zod_1.z.string(),
73
+ minQuestions: zod_1.z.number().int().positive(),
74
+ });
75
+ const SectionExamYamlSchema = zod_1.z.object({
76
+ enabled: zod_1.z.boolean().default(true),
77
+ passingScore: zod_1.z.number().min(0).max(1).default(0.75),
78
+ timeLimitMinutes: zod_1.z.number().int().positive().optional(),
79
+ questionCount: zod_1.z.number().int().positive().default(10),
80
+ blueprint: zod_1.z.array(SectionExamBlueprintYamlSchema).default([]),
81
+ instructions: zod_1.z.string().optional(),
82
+ });
83
+ const SectionYamlSchema = zod_1.z.object({
84
+ id: zod_1.z.string(),
85
+ name: zod_1.z.string(),
86
+ description: zod_1.z.string().optional(),
87
+ sectionExam: SectionExamYamlSchema.optional(),
88
+ });
89
+ const CourseMetaSchema = zod_1.z.object({
90
+ id: zod_1.z.string(),
91
+ name: zod_1.z.string(),
92
+ description: zod_1.z.string().optional(),
93
+ estimatedHours: zod_1.z.number().positive(),
94
+ version: zod_1.z.string(),
95
+ sourceDocument: zod_1.z.string().optional(),
96
+ });
97
+ exports.CourseYamlSchema = zod_1.z
98
+ .object({
99
+ course: CourseMetaSchema,
100
+ sections: zod_1.z.array(SectionYamlSchema).optional().default([]),
101
+ concepts: zod_1.z.array(ConceptYamlSchema),
102
+ })
103
+ .superRefine((data, ctx) => {
104
+ const conceptIds = new Set(data.concepts.map((concept) => concept.id));
105
+ const sectionIds = new Set(data.sections.map((section) => section.id));
106
+ const conceptToSection = new Map(data.concepts
107
+ .filter((concept) => concept.section)
108
+ .map((concept) => [concept.id, concept.section]));
109
+ for (const concept of data.concepts) {
110
+ if (concept.section && !sectionIds.has(concept.section)) {
111
+ ctx.addIssue({
112
+ code: zod_1.z.ZodIssueCode.custom,
113
+ message: `Concept "${concept.id}" references unknown section "${concept.section}"`,
114
+ });
115
+ }
116
+ }
117
+ for (const section of data.sections) {
118
+ const exam = section.sectionExam;
119
+ if (!exam?.enabled) {
120
+ continue;
121
+ }
122
+ const sectionConcepts = data.concepts.filter((concept) => concept.section === section.id);
123
+ if (sectionConcepts.length < 2) {
124
+ ctx.addIssue({
125
+ code: zod_1.z.ZodIssueCode.custom,
126
+ message: `Section "${section.id}" needs at least two concepts when sectionExam is enabled`,
127
+ });
128
+ }
129
+ const minQuestions = exam.blueprint.reduce((sum, item) => sum + item.minQuestions, 0);
130
+ if (exam.questionCount < minQuestions) {
131
+ ctx.addIssue({
132
+ code: zod_1.z.ZodIssueCode.custom,
133
+ message: `Section "${section.id}" questionCount must be at least the sum of blueprint minQuestions`,
134
+ });
135
+ }
136
+ const availableProblems = sectionConcepts.reduce((sum, concept) => sum +
137
+ concept.knowledgePoints.reduce((kpSum, kp) => kpSum + kp.problems.length, 0), 0);
138
+ if (availableProblems < exam.questionCount) {
139
+ ctx.addIssue({
140
+ code: zod_1.z.ZodIssueCode.custom,
141
+ message: `Section "${section.id}" does not have enough eligible problems for its section exam`,
142
+ });
143
+ }
144
+ for (const item of exam.blueprint) {
145
+ if (!conceptIds.has(item.conceptId)) {
146
+ ctx.addIssue({
147
+ code: zod_1.z.ZodIssueCode.custom,
148
+ message: `Section "${section.id}" blueprint references unknown concept "${item.conceptId}"`,
149
+ });
150
+ continue;
151
+ }
152
+ if (conceptToSection.get(item.conceptId) !== section.id) {
153
+ ctx.addIssue({
154
+ code: zod_1.z.ZodIssueCode.custom,
155
+ message: `Section "${section.id}" blueprint concept "${item.conceptId}" must belong to the same section`,
156
+ });
157
+ }
158
+ }
159
+ }
160
+ });
161
+ //# sourceMappingURL=course-yaml.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"course-yaml.schema.js","sourceRoot":"","sources":["../../src/schemas/course-yaml.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './course-yaml.schema';
2
+ export * from './academy-manifest.schema';
3
+ export * from './brand-yaml.schema';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./course-yaml.schema"), exports);
18
+ __exportStar(require("./academy-manifest.schema"), exports);
19
+ __exportStar(require("./brand-yaml.schema"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,4DAA0C;AAC1C,sDAAoC"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@graspful/mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Graspful — create adaptive learning courses from AI agents",
5
+ "keywords": ["mcp", "graspful", "course", "adaptive-learning", "ai-agent"],
6
+ "bin": {
7
+ "graspful-mcp": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "files": ["dist"],
11
+ "scripts": {
12
+ "build": "bun x tsc",
13
+ "dev": "bun x tsc --watch"
14
+ },
15
+ "dependencies": {
16
+ "@modelcontextprotocol/sdk": "^1.27.1",
17
+ "js-yaml": "^4.1.0",
18
+ "zod": "^3.24.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/js-yaml": "^4.0.9",
22
+ "@types/node": "^25.5.0",
23
+ "typescript": "^5.7.0"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ }
28
+ }