@graspful/mcp 0.1.0 → 0.2.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/package.json CHANGED
@@ -1,8 +1,14 @@
1
1
  {
2
2
  "name": "@graspful/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for Graspful — create adaptive learning courses from AI agents",
5
- "keywords": ["mcp", "graspful", "course", "adaptive-learning", "ai-agent"],
5
+ "keywords": ["mcp", "mcp-server", "graspful", "course", "course-creation", "adaptive-learning", "ai-agent", "knowledge-graph", "spaced-repetition", "edtech", "education", "yaml", "lms", "model-context-protocol"],
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/willwearing/graspful.git",
9
+ "directory": "packages/mcp"
10
+ },
11
+ "homepage": "https://graspful.ai",
6
12
  "bin": {
7
13
  "graspful-mcp": "./dist/index.js"
8
14
  },
@@ -13,6 +19,7 @@
13
19
  "dev": "bun x tsc --watch"
14
20
  },
15
21
  "dependencies": {
22
+ "@graspful/shared": "0.0.1",
16
23
  "@modelcontextprotocol/sdk": "^1.27.1",
17
24
  "js-yaml": "^4.1.0",
18
25
  "zod": "^3.24.0"
@@ -1,20 +0,0 @@
1
- export interface QualityCheckResult {
2
- check: string;
3
- passed: boolean;
4
- details?: string;
5
- }
6
- export interface QualityGateResult {
7
- passed: boolean;
8
- score: string;
9
- failures: QualityCheckResult[];
10
- warnings: QualityCheckResult[];
11
- stats: {
12
- concepts: number;
13
- kps: number;
14
- problems: number;
15
- authoredConcepts: number;
16
- stubConcepts: number;
17
- };
18
- }
19
- export declare const QUALITY_CHECKS: readonly ["yaml_parses", "unique_problem_ids", "prerequisites_valid", "question_deduplication", "difficulty_staircase", "cross_concept_coverage", "problem_variant_depth", "instruction_formatting", "worked_example_coverage", "import_dry_run"];
20
- export type QualityCheckName = (typeof QUALITY_CHECKS)[number];
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QUALITY_CHECKS = void 0;
4
- exports.QUALITY_CHECKS = [
5
- 'yaml_parses',
6
- 'unique_problem_ids',
7
- 'prerequisites_valid',
8
- 'question_deduplication',
9
- 'difficulty_staircase',
10
- 'cross_concept_coverage',
11
- 'problem_variant_depth',
12
- 'instruction_formatting',
13
- 'worked_example_coverage',
14
- 'import_dry_run',
15
- ];
16
- //# sourceMappingURL=quality-gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../src/quality-gate.ts"],"names":[],"mappings":";;;AAoBa,QAAA,cAAc,GAAG;IAC5B,aAAa;IACb,oBAAoB;IACpB,qBAAqB;IACrB,wBAAwB;IACxB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,gBAAgB;CACR,CAAC"}
@@ -1,163 +0,0 @@
1
- import { z } from 'zod';
2
- declare const AcademyPartSchema: z.ZodObject<{
3
- id: z.ZodString;
4
- name: z.ZodString;
5
- description: z.ZodOptional<z.ZodString>;
6
- }, "strip", z.ZodTypeAny, {
7
- id: string;
8
- name: string;
9
- description?: string | undefined;
10
- }, {
11
- id: string;
12
- name: string;
13
- description?: string | undefined;
14
- }>;
15
- declare const AcademyCourseEntrySchema: z.ZodObject<{
16
- id: z.ZodString;
17
- name: z.ZodString;
18
- description: z.ZodOptional<z.ZodString>;
19
- part: z.ZodOptional<z.ZodString>;
20
- file: z.ZodString;
21
- }, "strip", z.ZodTypeAny, {
22
- id: string;
23
- name: string;
24
- file: string;
25
- description?: string | undefined;
26
- part?: string | undefined;
27
- }, {
28
- id: string;
29
- name: string;
30
- file: string;
31
- description?: string | undefined;
32
- part?: string | undefined;
33
- }>;
34
- export declare const AcademyManifestSchema: z.ZodEffects<z.ZodObject<{
35
- academy: z.ZodObject<{
36
- id: z.ZodString;
37
- name: z.ZodString;
38
- description: z.ZodOptional<z.ZodString>;
39
- version: z.ZodString;
40
- }, "strip", z.ZodTypeAny, {
41
- id: string;
42
- name: string;
43
- version: string;
44
- description?: string | undefined;
45
- }, {
46
- id: string;
47
- name: string;
48
- version: string;
49
- description?: string | undefined;
50
- }>;
51
- parts: z.ZodDefault<z.ZodArray<z.ZodObject<{
52
- id: z.ZodString;
53
- name: z.ZodString;
54
- description: z.ZodOptional<z.ZodString>;
55
- }, "strip", z.ZodTypeAny, {
56
- id: string;
57
- name: string;
58
- description?: string | undefined;
59
- }, {
60
- id: string;
61
- name: string;
62
- description?: string | undefined;
63
- }>, "many">>;
64
- courses: z.ZodArray<z.ZodObject<{
65
- id: z.ZodString;
66
- name: z.ZodString;
67
- description: z.ZodOptional<z.ZodString>;
68
- part: z.ZodOptional<z.ZodString>;
69
- file: z.ZodString;
70
- }, "strip", z.ZodTypeAny, {
71
- id: string;
72
- name: string;
73
- file: string;
74
- description?: string | undefined;
75
- part?: string | undefined;
76
- }, {
77
- id: string;
78
- name: string;
79
- file: string;
80
- description?: string | undefined;
81
- part?: string | undefined;
82
- }>, "many">;
83
- }, "strip", z.ZodTypeAny, {
84
- academy: {
85
- id: string;
86
- name: string;
87
- version: string;
88
- description?: string | undefined;
89
- };
90
- parts: {
91
- id: string;
92
- name: string;
93
- description?: string | undefined;
94
- }[];
95
- courses: {
96
- id: string;
97
- name: string;
98
- file: string;
99
- description?: string | undefined;
100
- part?: string | undefined;
101
- }[];
102
- }, {
103
- academy: {
104
- id: string;
105
- name: string;
106
- version: string;
107
- description?: string | undefined;
108
- };
109
- courses: {
110
- id: string;
111
- name: string;
112
- file: string;
113
- description?: string | undefined;
114
- part?: string | undefined;
115
- }[];
116
- parts?: {
117
- id: string;
118
- name: string;
119
- description?: string | undefined;
120
- }[] | undefined;
121
- }>, {
122
- academy: {
123
- id: string;
124
- name: string;
125
- version: string;
126
- description?: string | undefined;
127
- };
128
- parts: {
129
- id: string;
130
- name: string;
131
- description?: string | undefined;
132
- }[];
133
- courses: {
134
- id: string;
135
- name: string;
136
- file: string;
137
- description?: string | undefined;
138
- part?: string | undefined;
139
- }[];
140
- }, {
141
- academy: {
142
- id: string;
143
- name: string;
144
- version: string;
145
- description?: string | undefined;
146
- };
147
- courses: {
148
- id: string;
149
- name: string;
150
- file: string;
151
- description?: string | undefined;
152
- part?: string | undefined;
153
- }[];
154
- parts?: {
155
- id: string;
156
- name: string;
157
- description?: string | undefined;
158
- }[] | undefined;
159
- }>;
160
- export type AcademyManifest = z.infer<typeof AcademyManifestSchema>;
161
- export type AcademyManifestPart = z.infer<typeof AcademyPartSchema>;
162
- export type AcademyManifestCourse = z.infer<typeof AcademyCourseEntrySchema>;
163
- export {};
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AcademyManifestSchema = void 0;
4
- const zod_1 = require("zod");
5
- const AcademyMetaSchema = zod_1.z.object({
6
- id: zod_1.z.string().min(1),
7
- name: zod_1.z.string().min(1),
8
- description: zod_1.z.string().optional(),
9
- version: zod_1.z.string().min(1),
10
- });
11
- const AcademyPartSchema = zod_1.z.object({
12
- id: zod_1.z.string().min(1),
13
- name: zod_1.z.string().min(1),
14
- description: zod_1.z.string().optional(),
15
- });
16
- const AcademyCourseEntrySchema = zod_1.z.object({
17
- id: zod_1.z.string().min(1),
18
- name: zod_1.z.string().min(1),
19
- description: zod_1.z.string().optional(),
20
- part: zod_1.z.string().min(1).optional(),
21
- file: zod_1.z.string().min(1),
22
- });
23
- exports.AcademyManifestSchema = zod_1.z
24
- .object({
25
- academy: AcademyMetaSchema,
26
- parts: zod_1.z.array(AcademyPartSchema).default([]),
27
- courses: zod_1.z.array(AcademyCourseEntrySchema).min(1),
28
- })
29
- .superRefine((data, ctx) => {
30
- const partIds = new Set();
31
- for (const part of data.parts) {
32
- if (partIds.has(part.id)) {
33
- ctx.addIssue({
34
- code: zod_1.z.ZodIssueCode.custom,
35
- message: `Duplicate academy part "${part.id}"`,
36
- });
37
- continue;
38
- }
39
- partIds.add(part.id);
40
- }
41
- const courseIds = new Set();
42
- const courseFiles = new Set();
43
- for (const course of data.courses) {
44
- if (courseIds.has(course.id)) {
45
- ctx.addIssue({
46
- code: zod_1.z.ZodIssueCode.custom,
47
- message: `Duplicate academy course "${course.id}"`,
48
- });
49
- }
50
- else {
51
- courseIds.add(course.id);
52
- }
53
- if (courseFiles.has(course.file)) {
54
- ctx.addIssue({
55
- code: zod_1.z.ZodIssueCode.custom,
56
- message: `Duplicate academy course file "${course.file}"`,
57
- });
58
- }
59
- else {
60
- courseFiles.add(course.file);
61
- }
62
- if (course.part && !partIds.has(course.part)) {
63
- ctx.addIssue({
64
- code: zod_1.z.ZodIssueCode.custom,
65
- message: `Course "${course.id}" references unknown academy part "${course.part}"`,
66
- });
67
- }
68
- }
69
- });
70
- //# sourceMappingURL=academy-manifest.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"academy-manifest.schema.js","sourceRoot":"","sources":["../../src/schemas/academy-manifest.schema.ts"],"names":[],"mappings":"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"}