@graspful/mcp 0.2.2 → 0.2.4
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/README.md +5 -5
- package/dist/index.js +119 -737
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -33,13 +33,13 @@ Or add manually to your editor's MCP config (see [Editor Configuration](#editor-
|
|
|
33
33
|
|
|
34
34
|
### 2. Create an account
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Run the CLI once to complete browser auth and mint an API key, then restart the
|
|
37
|
+
MCP server with `GRASPFUL_API_KEY` set.
|
|
37
38
|
|
|
39
|
+
```bash
|
|
40
|
+
npx @graspful/cli register
|
|
41
|
+
export GRASPFUL_API_KEY="gsk_..."
|
|
38
42
|
```
|
|
39
|
-
graspful_register(email: "you@example.com", password: "your-password")
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Or via CLI: `npx @graspful/cli register --email you@example.com --password your-password`
|
|
43
43
|
|
|
44
44
|
### 3. Build a course
|
|
45
45
|
|
package/dist/index.js
CHANGED
|
@@ -38,11 +38,30 @@ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
|
38
38
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
39
39
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
40
40
|
const yaml = __importStar(require("js-yaml"));
|
|
41
|
-
const
|
|
41
|
+
const posthog_node_1 = require("posthog-node");
|
|
42
42
|
const shared_1 = require("@graspful/shared");
|
|
43
|
+
// ─── PostHog analytics ──────────────────────────────────────────────────────
|
|
44
|
+
const posthogKey = process.env.POSTHOG_API_KEY || process.env.NEXT_PUBLIC_POSTHOG_KEY;
|
|
45
|
+
const posthogClient = posthogKey
|
|
46
|
+
? new posthog_node_1.PostHog(posthogKey, {
|
|
47
|
+
host: process.env.POSTHOG_HOST || process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.i.posthog.com',
|
|
48
|
+
flushAt: 1,
|
|
49
|
+
flushInterval: 0,
|
|
50
|
+
})
|
|
51
|
+
: null;
|
|
52
|
+
function mcpDistinctId() {
|
|
53
|
+
return process.env.GRASPFUL_USER_ID || process.env.GRASPFUL_API_KEY || 'anonymous-mcp';
|
|
54
|
+
}
|
|
55
|
+
function mcpCapture(event, properties = {}) {
|
|
56
|
+
posthogClient?.capture({
|
|
57
|
+
distinctId: mcpDistinctId(),
|
|
58
|
+
event,
|
|
59
|
+
properties: { ...properties, source: 'mcp' },
|
|
60
|
+
});
|
|
61
|
+
}
|
|
43
62
|
// ─── Auth guard ─────────────────────────────────────────────────────────────
|
|
44
63
|
const AUTH_REQUIRED_ERROR = 'Not authenticated. To authenticate, either:\n' +
|
|
45
|
-
'1.
|
|
64
|
+
'1. Run `graspful register` in a terminal to complete browser auth and mint an API key, OR\n' +
|
|
46
65
|
'2. Set the GRASPFUL_API_KEY environment variable (e.g., GRASPFUL_API_KEY=gsk_...).\n\n' +
|
|
47
66
|
'You can scaffold, validate, and review courses without authentication. ' +
|
|
48
67
|
'Authentication is only required for importing, publishing, and listing courses.';
|
|
@@ -52,7 +71,7 @@ function requireApiAuth() {
|
|
|
52
71
|
throw new Error(AUTH_REQUIRED_ERROR);
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
|
-
// ─── API Client
|
|
74
|
+
// ─── API Client ─────────────────────────────────────────────────────────────
|
|
56
75
|
function getApiCredentials() {
|
|
57
76
|
const baseUrl = (process.env.GRASPFUL_API_URL || 'https://api.graspful.ai').replace(/\/$/, '');
|
|
58
77
|
const apiKey = process.env.GRASPFUL_API_KEY;
|
|
@@ -61,15 +80,15 @@ function getApiCredentials() {
|
|
|
61
80
|
}
|
|
62
81
|
return { baseUrl };
|
|
63
82
|
}
|
|
64
|
-
async function
|
|
83
|
+
async function apiFetch(method, path, body) {
|
|
65
84
|
const { baseUrl, authHeader } = getApiCredentials();
|
|
66
85
|
const headers = { 'Content-Type': 'application/json' };
|
|
67
86
|
if (authHeader)
|
|
68
87
|
headers['Authorization'] = authHeader;
|
|
69
88
|
const res = await fetch(`${baseUrl}${path}`, {
|
|
70
|
-
method
|
|
89
|
+
method,
|
|
71
90
|
headers,
|
|
72
|
-
body: JSON.stringify(body),
|
|
91
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
73
92
|
});
|
|
74
93
|
if (!res.ok) {
|
|
75
94
|
const text = await res.text();
|
|
@@ -77,656 +96,13 @@ async function apiPost(path, body) {
|
|
|
77
96
|
}
|
|
78
97
|
return res.json();
|
|
79
98
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
headers['Authorization'] = authHeader;
|
|
85
|
-
const res = await fetch(`${baseUrl}${path}`, {
|
|
86
|
-
method: 'GET',
|
|
87
|
-
headers,
|
|
88
|
-
});
|
|
89
|
-
if (!res.ok) {
|
|
90
|
-
const text = await res.text();
|
|
91
|
-
throw new Error(`API error ${res.status}: ${text}`);
|
|
92
|
-
}
|
|
93
|
-
return res.json();
|
|
94
|
-
}
|
|
95
|
-
// ─── Scaffold helpers (mirrors packages/cli/src/commands/create-course.ts) ──
|
|
96
|
-
function scaffoldCourse(topic, options) {
|
|
97
|
-
const slug = topic.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
98
|
-
return yaml.dump({
|
|
99
|
-
course: {
|
|
100
|
-
id: slug,
|
|
101
|
-
name: topic,
|
|
102
|
-
description: `Adaptive course on ${topic}`,
|
|
103
|
-
estimatedHours: options.hours || 10,
|
|
104
|
-
version: '2026.1',
|
|
105
|
-
sourceDocument: options.source || 'TODO: Add source document',
|
|
106
|
-
},
|
|
107
|
-
sections: [
|
|
108
|
-
{ id: 'foundations', name: 'Foundations', description: 'Core concepts' },
|
|
109
|
-
{ id: 'application', name: 'Application', description: 'Applied concepts' },
|
|
110
|
-
],
|
|
111
|
-
concepts: [
|
|
112
|
-
{
|
|
113
|
-
id: `${slug}-intro`,
|
|
114
|
-
name: `Introduction to ${topic}`,
|
|
115
|
-
section: 'foundations',
|
|
116
|
-
difficulty: 2,
|
|
117
|
-
estimatedMinutes: 15,
|
|
118
|
-
tags: ['foundational'],
|
|
119
|
-
prerequisites: [],
|
|
120
|
-
knowledgePoints: [],
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
}, { lineWidth: 120, noRefs: true });
|
|
124
|
-
}
|
|
125
|
-
function scaffoldBrand(niche, options) {
|
|
126
|
-
const NICHE_PRESETS = {
|
|
127
|
-
education: { preset: 'blue', tagline: 'Learn smarter, not harder', headline: 'Master any subject with adaptive learning' },
|
|
128
|
-
healthcare: { preset: 'emerald', tagline: 'Training that saves lives', headline: 'Adaptive healthcare education for professionals' },
|
|
129
|
-
finance: { preset: 'slate', tagline: 'Build financial expertise', headline: 'Master finance with adaptive learning' },
|
|
130
|
-
tech: { preset: 'indigo', tagline: 'Level up your skills', headline: 'Adaptive tech training that meets you where you are' },
|
|
131
|
-
legal: { preset: 'amber', tagline: 'Know the law, pass the exam', headline: 'Adaptive legal education for exam success' },
|
|
132
|
-
default: { preset: 'blue', tagline: 'Learn adaptively', headline: 'Personalized learning that works' },
|
|
133
|
-
};
|
|
134
|
-
const config = NICHE_PRESETS[niche] || NICHE_PRESETS['default'];
|
|
135
|
-
const slug = (options.name || niche).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
136
|
-
const name = options.name || `${niche.charAt(0).toUpperCase() + niche.slice(1)} Academy`;
|
|
137
|
-
const domain = options.domain || `${slug}.graspful.com`;
|
|
138
|
-
return yaml.dump({
|
|
139
|
-
brand: {
|
|
140
|
-
id: slug,
|
|
141
|
-
name,
|
|
142
|
-
domain,
|
|
143
|
-
tagline: config.tagline,
|
|
144
|
-
orgSlug: options.orgSlug || 'TODO: your-org-slug',
|
|
145
|
-
},
|
|
146
|
-
theme: {
|
|
147
|
-
preset: config.preset,
|
|
148
|
-
radius: '0.5rem',
|
|
149
|
-
},
|
|
150
|
-
landing: {
|
|
151
|
-
hero: {
|
|
152
|
-
headline: config.headline,
|
|
153
|
-
subheadline: `${name} uses adaptive learning to help you master concepts faster.`,
|
|
154
|
-
ctaText: 'Start Learning',
|
|
155
|
-
},
|
|
156
|
-
features: {
|
|
157
|
-
heading: 'Why choose us?',
|
|
158
|
-
items: [
|
|
159
|
-
{ title: 'Adaptive Learning', description: 'Content adapts to your knowledge level', icon: 'brain' },
|
|
160
|
-
{ title: 'Spaced Repetition', description: 'Review at optimal intervals for lasting memory', icon: 'clock' },
|
|
161
|
-
{ title: 'Progress Tracking', description: 'See exactly where you stand', icon: 'chart' },
|
|
162
|
-
],
|
|
163
|
-
},
|
|
164
|
-
howItWorks: {
|
|
165
|
-
heading: 'How it works',
|
|
166
|
-
items: [
|
|
167
|
-
{ title: 'Take a diagnostic', description: 'We assess what you already know' },
|
|
168
|
-
{ title: 'Learn adaptively', description: 'Focus on gaps, skip what you know' },
|
|
169
|
-
{ title: 'Master the material', description: 'Prove mastery through progressive challenges' },
|
|
170
|
-
],
|
|
171
|
-
},
|
|
172
|
-
faq: [],
|
|
173
|
-
},
|
|
174
|
-
seo: {
|
|
175
|
-
title: `${name} — Adaptive Learning`,
|
|
176
|
-
description: config.tagline,
|
|
177
|
-
keywords: [niche, 'learning', 'adaptive', 'education'],
|
|
178
|
-
},
|
|
179
|
-
}, { lineWidth: 120, noRefs: true });
|
|
180
|
-
}
|
|
181
|
-
function detectFileType(data) {
|
|
182
|
-
if (typeof data !== 'object' || data === null)
|
|
183
|
-
return null;
|
|
184
|
-
const obj = data;
|
|
185
|
-
if ('course' in obj)
|
|
186
|
-
return 'course';
|
|
187
|
-
if ('brand' in obj)
|
|
188
|
-
return 'brand';
|
|
189
|
-
if ('academy' in obj)
|
|
190
|
-
return 'academy';
|
|
191
|
-
return null;
|
|
99
|
+
// ─── YAML helpers ───────────────────────────────────────────────────────────
|
|
100
|
+
const YAML_DUMP_OPTS = { lineWidth: 120, noRefs: true };
|
|
101
|
+
function parseYaml(yamlStr) {
|
|
102
|
+
return yaml.load(yamlStr);
|
|
192
103
|
}
|
|
193
|
-
function
|
|
194
|
-
|
|
195
|
-
for (const c of concepts) {
|
|
196
|
-
graph.set(c.id, c.prerequisites);
|
|
197
|
-
}
|
|
198
|
-
const visited = new Set();
|
|
199
|
-
const inStack = new Set();
|
|
200
|
-
const cycles = [];
|
|
201
|
-
function dfs(node, path) {
|
|
202
|
-
if (inStack.has(node)) {
|
|
203
|
-
const cycleStart = path.indexOf(node);
|
|
204
|
-
const cycle = path.slice(cycleStart).concat(node);
|
|
205
|
-
cycles.push(`Cycle: ${cycle.join(' -> ')}`);
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
if (visited.has(node))
|
|
209
|
-
return false;
|
|
210
|
-
visited.add(node);
|
|
211
|
-
inStack.add(node);
|
|
212
|
-
path.push(node);
|
|
213
|
-
for (const dep of graph.get(node) ?? []) {
|
|
214
|
-
dfs(dep, path);
|
|
215
|
-
}
|
|
216
|
-
path.pop();
|
|
217
|
-
inStack.delete(node);
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
for (const id of graph.keys()) {
|
|
221
|
-
if (!visited.has(id)) {
|
|
222
|
-
dfs(id, []);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return cycles;
|
|
226
|
-
}
|
|
227
|
-
function validateYaml(yamlStr) {
|
|
228
|
-
let raw;
|
|
229
|
-
try {
|
|
230
|
-
raw = yaml.load(yamlStr);
|
|
231
|
-
}
|
|
232
|
-
catch (e) {
|
|
233
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
234
|
-
return { valid: false, errors: [`YAML parse error: ${msg}`], stats: {} };
|
|
235
|
-
}
|
|
236
|
-
const fileType = detectFileType(raw);
|
|
237
|
-
if (!fileType) {
|
|
238
|
-
return { valid: false, errors: ['Could not detect file type. Expected top-level key: course, brand, or academy'], stats: {} };
|
|
239
|
-
}
|
|
240
|
-
const schemaMap = {
|
|
241
|
-
course: shared_1.CourseYamlSchema,
|
|
242
|
-
brand: shared_1.BrandYamlSchema,
|
|
243
|
-
academy: shared_1.AcademyManifestSchema,
|
|
244
|
-
};
|
|
245
|
-
const result = schemaMap[fileType].safeParse(raw);
|
|
246
|
-
if (!result.success) {
|
|
247
|
-
const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
|
|
248
|
-
return { valid: false, fileType, errors, stats: {} };
|
|
249
|
-
}
|
|
250
|
-
// For courses, also check DAG
|
|
251
|
-
const dagErrors = [];
|
|
252
|
-
let stats = { fileType };
|
|
253
|
-
if (fileType === 'course') {
|
|
254
|
-
const data = result.data;
|
|
255
|
-
const conceptIds = new Set(data.concepts.map((c) => c.id));
|
|
256
|
-
for (const concept of data.concepts) {
|
|
257
|
-
for (const prereq of concept.prerequisites) {
|
|
258
|
-
if (!conceptIds.has(prereq)) {
|
|
259
|
-
dagErrors.push(`Concept "${concept.id}" has unknown prerequisite "${prereq}"`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
const cycles = detectCycles(data.concepts.map((c) => ({ id: c.id, prerequisites: c.prerequisites })));
|
|
264
|
-
dagErrors.push(...cycles);
|
|
265
|
-
const kpCount = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
|
|
266
|
-
const problemCount = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
|
|
267
|
-
stats = { fileType, concepts: data.concepts.length, knowledgePoints: kpCount, problems: problemCount };
|
|
268
|
-
}
|
|
269
|
-
if (dagErrors.length > 0) {
|
|
270
|
-
return { valid: false, fileType, errors: dagErrors, stats };
|
|
271
|
-
}
|
|
272
|
-
return { valid: true, fileType, errors: [], stats };
|
|
273
|
-
}
|
|
274
|
-
// ─── Review helpers (mirrors packages/cli/src/commands/review.ts) ───────────
|
|
275
|
-
function checkYamlParses(raw) {
|
|
276
|
-
const result = shared_1.CourseYamlSchema.safeParse(raw);
|
|
277
|
-
if (result.success) {
|
|
278
|
-
return { check: 'yaml_parses', passed: true };
|
|
279
|
-
}
|
|
280
|
-
const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
|
|
281
|
-
return {
|
|
282
|
-
check: 'yaml_parses',
|
|
283
|
-
passed: false,
|
|
284
|
-
details: `${errors.length} schema error(s): ${errors.slice(0, 5).join('; ')}${errors.length > 5 ? ` (+${errors.length - 5} more)` : ''}`,
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
function checkUniqueProblemIds(data) {
|
|
288
|
-
const duplicates = [];
|
|
289
|
-
const seen = new Set();
|
|
290
|
-
for (const concept of data.concepts) {
|
|
291
|
-
for (const kp of concept.knowledgePoints) {
|
|
292
|
-
for (const problem of kp.problems) {
|
|
293
|
-
if (seen.has(problem.id)) {
|
|
294
|
-
duplicates.push(problem.id);
|
|
295
|
-
}
|
|
296
|
-
seen.add(problem.id);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
if (duplicates.length === 0) {
|
|
301
|
-
return { check: 'unique_problem_ids', passed: true };
|
|
302
|
-
}
|
|
303
|
-
return {
|
|
304
|
-
check: 'unique_problem_ids',
|
|
305
|
-
passed: false,
|
|
306
|
-
details: `Duplicate problem IDs: ${duplicates.join(', ')}`,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
function checkPrerequisitesValid(data) {
|
|
310
|
-
const conceptIds = new Set(data.concepts.map((c) => c.id));
|
|
311
|
-
const invalid = [];
|
|
312
|
-
for (const concept of data.concepts) {
|
|
313
|
-
for (const prereq of concept.prerequisites) {
|
|
314
|
-
if (!conceptIds.has(prereq)) {
|
|
315
|
-
invalid.push(`${concept.id} -> ${prereq}`);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
if (invalid.length === 0) {
|
|
320
|
-
return { check: 'prerequisites_valid', passed: true };
|
|
321
|
-
}
|
|
322
|
-
return {
|
|
323
|
-
check: 'prerequisites_valid',
|
|
324
|
-
passed: false,
|
|
325
|
-
details: `Unknown prerequisites: ${invalid.join(', ')}`,
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
function normalizeText(text) {
|
|
329
|
-
return text.toLowerCase().replace(/[^a-z0-9\s]/g, '').replace(/\s+/g, ' ').trim();
|
|
330
|
-
}
|
|
331
|
-
function checkQuestionDeduplication(data) {
|
|
332
|
-
const seen = new Map();
|
|
333
|
-
const collisions = [];
|
|
334
|
-
for (const concept of data.concepts) {
|
|
335
|
-
for (const kp of concept.knowledgePoints) {
|
|
336
|
-
for (const problem of kp.problems) {
|
|
337
|
-
const normalized = normalizeText(problem.question);
|
|
338
|
-
const hash = crypto.createHash('md5').update(normalized).digest('hex').substring(0, 12);
|
|
339
|
-
const key = `${hash}-d${problem.difficulty ?? 'none'}`;
|
|
340
|
-
const existing = seen.get(key);
|
|
341
|
-
if (existing) {
|
|
342
|
-
collisions.push(`"${problem.id}" collides with "${existing.problemId}" (same question text at same difficulty)`);
|
|
343
|
-
}
|
|
344
|
-
else {
|
|
345
|
-
seen.set(key, { problemId: problem.id });
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
if (collisions.length === 0) {
|
|
351
|
-
return { check: 'question_deduplication', passed: true };
|
|
352
|
-
}
|
|
353
|
-
return {
|
|
354
|
-
check: 'question_deduplication',
|
|
355
|
-
passed: false,
|
|
356
|
-
details: collisions.slice(0, 5).join('; ') + (collisions.length > 5 ? ` (+${collisions.length - 5} more)` : ''),
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
|
-
function checkDifficultyStaircase(data) {
|
|
360
|
-
const failures = [];
|
|
361
|
-
for (const concept of data.concepts) {
|
|
362
|
-
if (concept.knowledgePoints.length === 0)
|
|
363
|
-
continue;
|
|
364
|
-
const difficulties = new Set();
|
|
365
|
-
for (const kp of concept.knowledgePoints) {
|
|
366
|
-
for (const problem of kp.problems) {
|
|
367
|
-
if (problem.difficulty != null) {
|
|
368
|
-
difficulties.add(problem.difficulty);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
if (difficulties.size > 0 && difficulties.size < 2) {
|
|
373
|
-
failures.push(`"${concept.id}" has problems at only ${difficulties.size} difficulty level(s) — need 2+`);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
if (failures.length === 0) {
|
|
377
|
-
return { check: 'difficulty_staircase', passed: true };
|
|
378
|
-
}
|
|
379
|
-
return {
|
|
380
|
-
check: 'difficulty_staircase',
|
|
381
|
-
passed: false,
|
|
382
|
-
details: failures.slice(0, 5).join('; ') + (failures.length > 5 ? ` (+${failures.length - 5} more)` : ''),
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
function extractStems(text) {
|
|
386
|
-
return text.toLowerCase().replace(/[^a-z0-9\s]/g, '').split(/\s+/).filter((w) => w.length > 4);
|
|
387
|
-
}
|
|
388
|
-
function checkCrossConceptCoverage(data) {
|
|
389
|
-
const stemConceptCount = new Map();
|
|
390
|
-
for (const concept of data.concepts) {
|
|
391
|
-
for (const kp of concept.knowledgePoints) {
|
|
392
|
-
for (const problem of kp.problems) {
|
|
393
|
-
const stems = extractStems(problem.question);
|
|
394
|
-
for (const stem of stems) {
|
|
395
|
-
if (!stemConceptCount.has(stem)) {
|
|
396
|
-
stemConceptCount.set(stem, new Set());
|
|
397
|
-
}
|
|
398
|
-
stemConceptCount.get(stem).add(concept.id);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
const overused = [];
|
|
404
|
-
for (const [stem, concepts] of stemConceptCount) {
|
|
405
|
-
if (concepts.size > 3) {
|
|
406
|
-
overused.push(`"${stem}" appears across ${concepts.size} concepts`);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
const commonWords = new Set([
|
|
410
|
-
'which', 'would', 'should', 'could', 'about', 'their', 'there', 'these', 'those',
|
|
411
|
-
'being', 'between', 'through', 'during', 'before', 'after', 'above', 'below',
|
|
412
|
-
'following', 'statement', 'answer', 'question', 'correct', 'incorrect',
|
|
413
|
-
'agent', 'property', 'owner', 'buyer', 'seller',
|
|
414
|
-
]);
|
|
415
|
-
const meaningfulOverused = overused.filter((entry) => {
|
|
416
|
-
const stem = entry.match(/"([^"]+)"/)?.[1] ?? '';
|
|
417
|
-
return !commonWords.has(stem);
|
|
418
|
-
});
|
|
419
|
-
if (meaningfulOverused.length === 0) {
|
|
420
|
-
return { check: 'cross_concept_coverage', passed: true };
|
|
421
|
-
}
|
|
422
|
-
return {
|
|
423
|
-
check: 'cross_concept_coverage',
|
|
424
|
-
passed: meaningfulOverused.length <= 5,
|
|
425
|
-
details: meaningfulOverused.slice(0, 5).join('; ') + (meaningfulOverused.length > 5 ? ` (+${meaningfulOverused.length - 5} more)` : ''),
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
function checkProblemVariantDepth(data) {
|
|
429
|
-
const failures = [];
|
|
430
|
-
for (const concept of data.concepts) {
|
|
431
|
-
if (concept.knowledgePoints.length === 0)
|
|
432
|
-
continue;
|
|
433
|
-
for (const kp of concept.knowledgePoints) {
|
|
434
|
-
if (kp.problems.length < 3) {
|
|
435
|
-
failures.push(`"${concept.id}/${kp.id}" has ${kp.problems.length} problem(s) — need 3+`);
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
if (failures.length === 0) {
|
|
440
|
-
return { check: 'problem_variant_depth', passed: true };
|
|
441
|
-
}
|
|
442
|
-
return {
|
|
443
|
-
check: 'problem_variant_depth',
|
|
444
|
-
passed: false,
|
|
445
|
-
details: failures.slice(0, 5).join('; ') + (failures.length > 5 ? ` (+${failures.length - 5} more)` : ''),
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
function checkInstructionFormatting(data) {
|
|
449
|
-
const warnings = [];
|
|
450
|
-
for (const concept of data.concepts) {
|
|
451
|
-
for (const kp of concept.knowledgePoints) {
|
|
452
|
-
if (!kp.instruction)
|
|
453
|
-
continue;
|
|
454
|
-
if (kp.instruction.match(/^[\w\-./]+\.(md|txt|html)$/))
|
|
455
|
-
continue;
|
|
456
|
-
const wordCount = kp.instruction.split(/\s+/).filter(Boolean).length;
|
|
457
|
-
const hasContentBlocks = kp.instructionContent && kp.instructionContent.length > 0;
|
|
458
|
-
if (wordCount > 100 && !hasContentBlocks) {
|
|
459
|
-
warnings.push(`"${concept.id}/${kp.id}" instruction is ${wordCount} words with no content blocks`);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
if (warnings.length === 0) {
|
|
464
|
-
return { check: 'instruction_formatting', passed: true };
|
|
465
|
-
}
|
|
466
|
-
return {
|
|
467
|
-
check: 'instruction_formatting',
|
|
468
|
-
passed: false,
|
|
469
|
-
details: warnings.slice(0, 5).join('; ') + (warnings.length > 5 ? ` (+${warnings.length - 5} more)` : ''),
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
function checkWorkedExampleCoverage(data) {
|
|
473
|
-
const authoredConcepts = data.concepts.filter((c) => c.knowledgePoints.length > 0);
|
|
474
|
-
if (authoredConcepts.length === 0) {
|
|
475
|
-
return { check: 'worked_example_coverage', passed: true };
|
|
476
|
-
}
|
|
477
|
-
const withExamples = authoredConcepts.filter((c) => c.knowledgePoints.some((kp) => kp.workedExample && kp.workedExample.trim().length > 0));
|
|
478
|
-
const coverage = withExamples.length / authoredConcepts.length;
|
|
479
|
-
if (coverage >= 0.5) {
|
|
480
|
-
return { check: 'worked_example_coverage', passed: true };
|
|
481
|
-
}
|
|
482
|
-
return {
|
|
483
|
-
check: 'worked_example_coverage',
|
|
484
|
-
passed: false,
|
|
485
|
-
details: `${withExamples.length}/${authoredConcepts.length} authored concepts have worked examples (${Math.round(coverage * 100)}%) — need 50%+`,
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
function checkImportDryRun(data) {
|
|
489
|
-
const conceptIds = new Set(data.concepts.map((c) => c.id));
|
|
490
|
-
const errors = [];
|
|
491
|
-
for (const concept of data.concepts) {
|
|
492
|
-
for (const prereq of concept.prerequisites) {
|
|
493
|
-
if (!conceptIds.has(prereq)) {
|
|
494
|
-
errors.push(`Unknown prerequisite: ${concept.id} -> ${prereq}`);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
const graph = new Map();
|
|
499
|
-
for (const c of data.concepts) {
|
|
500
|
-
graph.set(c.id, [...c.prerequisites]);
|
|
501
|
-
}
|
|
502
|
-
const visited = new Set();
|
|
503
|
-
const inStack = new Set();
|
|
504
|
-
function hasCycle(node, path) {
|
|
505
|
-
if (inStack.has(node)) {
|
|
506
|
-
const cycleStart = path.indexOf(node);
|
|
507
|
-
const cycle = path.slice(cycleStart).concat(node);
|
|
508
|
-
errors.push(`Cycle detected: ${cycle.join(' -> ')}`);
|
|
509
|
-
return true;
|
|
510
|
-
}
|
|
511
|
-
if (visited.has(node))
|
|
512
|
-
return false;
|
|
513
|
-
visited.add(node);
|
|
514
|
-
inStack.add(node);
|
|
515
|
-
path.push(node);
|
|
516
|
-
let foundCycle = false;
|
|
517
|
-
for (const dep of graph.get(node) ?? []) {
|
|
518
|
-
if (hasCycle(dep, path)) {
|
|
519
|
-
foundCycle = true;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
path.pop();
|
|
523
|
-
inStack.delete(node);
|
|
524
|
-
return foundCycle;
|
|
525
|
-
}
|
|
526
|
-
for (const id of graph.keys()) {
|
|
527
|
-
if (!visited.has(id)) {
|
|
528
|
-
hasCycle(id, []);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
if (errors.length === 0) {
|
|
532
|
-
return { check: 'import_dry_run', passed: true };
|
|
533
|
-
}
|
|
534
|
-
return {
|
|
535
|
-
check: 'import_dry_run',
|
|
536
|
-
passed: false,
|
|
537
|
-
details: errors.join('; '),
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
function runReview(yamlStr) {
|
|
541
|
-
let raw;
|
|
542
|
-
try {
|
|
543
|
-
raw = yaml.load(yamlStr);
|
|
544
|
-
}
|
|
545
|
-
catch (e) {
|
|
546
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
547
|
-
return {
|
|
548
|
-
passed: false,
|
|
549
|
-
score: '0/10',
|
|
550
|
-
failures: [{ check: 'yaml_parses', passed: false, details: `YAML parse error: ${msg}` }],
|
|
551
|
-
warnings: [],
|
|
552
|
-
stats: { concepts: 0, kps: 0, problems: 0, authoredConcepts: 0, stubConcepts: 0 },
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
const checks = [];
|
|
556
|
-
const parseCheck = checkYamlParses(raw);
|
|
557
|
-
checks.push(parseCheck);
|
|
558
|
-
if (!parseCheck.passed) {
|
|
559
|
-
return {
|
|
560
|
-
passed: false,
|
|
561
|
-
score: '0/10',
|
|
562
|
-
failures: checks.filter((c) => !c.passed),
|
|
563
|
-
warnings: [],
|
|
564
|
-
stats: { concepts: 0, kps: 0, problems: 0, authoredConcepts: 0, stubConcepts: 0 },
|
|
565
|
-
};
|
|
566
|
-
}
|
|
567
|
-
const data = shared_1.CourseYamlSchema.parse(raw);
|
|
568
|
-
const authoredConcepts = data.concepts.filter((c) => c.knowledgePoints.length > 0);
|
|
569
|
-
const stubConcepts = data.concepts.filter((c) => c.knowledgePoints.length === 0);
|
|
570
|
-
const kps = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
|
|
571
|
-
const problems = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
|
|
572
|
-
const stats = {
|
|
573
|
-
concepts: data.concepts.length,
|
|
574
|
-
kps,
|
|
575
|
-
problems,
|
|
576
|
-
authoredConcepts: authoredConcepts.length,
|
|
577
|
-
stubConcepts: stubConcepts.length,
|
|
578
|
-
};
|
|
579
|
-
checks.push(checkUniqueProblemIds(data));
|
|
580
|
-
checks.push(checkPrerequisitesValid(data));
|
|
581
|
-
checks.push(checkQuestionDeduplication(data));
|
|
582
|
-
checks.push(checkDifficultyStaircase(data));
|
|
583
|
-
checks.push(checkCrossConceptCoverage(data));
|
|
584
|
-
checks.push(checkProblemVariantDepth(data));
|
|
585
|
-
checks.push(checkInstructionFormatting(data));
|
|
586
|
-
checks.push(checkWorkedExampleCoverage(data));
|
|
587
|
-
checks.push(checkImportDryRun(data));
|
|
588
|
-
const passedCount = checks.filter((c) => c.passed).length;
|
|
589
|
-
const failures = checks.filter((c) => !c.passed);
|
|
590
|
-
return {
|
|
591
|
-
passed: failures.length === 0,
|
|
592
|
-
score: `${passedCount}/10`,
|
|
593
|
-
failures,
|
|
594
|
-
warnings: [],
|
|
595
|
-
stats,
|
|
596
|
-
};
|
|
597
|
-
}
|
|
598
|
-
// ─── Describe helper (mirrors packages/cli/src/commands/describe.ts) ────────
|
|
599
|
-
function computeGraphDepth(concepts) {
|
|
600
|
-
const graph = new Map();
|
|
601
|
-
for (const c of concepts) {
|
|
602
|
-
graph.set(c.id, c.prerequisites);
|
|
603
|
-
}
|
|
604
|
-
const memo = new Map();
|
|
605
|
-
function depth(id, visited) {
|
|
606
|
-
if (memo.has(id))
|
|
607
|
-
return memo.get(id);
|
|
608
|
-
if (visited.has(id))
|
|
609
|
-
return 0;
|
|
610
|
-
visited.add(id);
|
|
611
|
-
const prereqs = graph.get(id) ?? [];
|
|
612
|
-
let maxPrereqDepth = 0;
|
|
613
|
-
for (const prereq of prereqs) {
|
|
614
|
-
if (graph.has(prereq)) {
|
|
615
|
-
maxPrereqDepth = Math.max(maxPrereqDepth, depth(prereq, visited));
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
const d = maxPrereqDepth + 1;
|
|
619
|
-
memo.set(id, d);
|
|
620
|
-
return d;
|
|
621
|
-
}
|
|
622
|
-
let maxDepth = 0;
|
|
623
|
-
for (const c of concepts) {
|
|
624
|
-
maxDepth = Math.max(maxDepth, depth(c.id, new Set()));
|
|
625
|
-
}
|
|
626
|
-
return maxDepth;
|
|
627
|
-
}
|
|
628
|
-
function describeCourse(yamlStr) {
|
|
629
|
-
const raw = yaml.load(yamlStr);
|
|
630
|
-
const result = shared_1.CourseYamlSchema.safeParse(raw);
|
|
631
|
-
if (!result.success) {
|
|
632
|
-
throw new Error(`Invalid course YAML: ${result.error.issues[0]?.message ?? 'unknown error'}`);
|
|
633
|
-
}
|
|
634
|
-
const data = result.data;
|
|
635
|
-
const concepts = data.concepts;
|
|
636
|
-
const sections = data.sections;
|
|
637
|
-
const authoredConcepts = concepts.filter((c) => c.knowledgePoints.length > 0);
|
|
638
|
-
const stubConcepts = concepts.filter((c) => c.knowledgePoints.length === 0);
|
|
639
|
-
const kpCount = concepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
|
|
640
|
-
const problemCount = concepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
|
|
641
|
-
const graphDepth = computeGraphDepth(concepts);
|
|
642
|
-
const conceptsWithoutKps = stubConcepts.map((c) => c.id);
|
|
643
|
-
const kpsWithoutProblems = [];
|
|
644
|
-
for (const c of concepts) {
|
|
645
|
-
for (const kp of c.knowledgePoints) {
|
|
646
|
-
if (kp.problems.length === 0) {
|
|
647
|
-
kpsWithoutProblems.push(`${c.id}/${kp.id}`);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
const sectionBreakdown = [];
|
|
652
|
-
if (sections.length > 0) {
|
|
653
|
-
for (const section of sections) {
|
|
654
|
-
const sectionConcepts = concepts.filter((c) => c.section === section.id);
|
|
655
|
-
const sKps = sectionConcepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
|
|
656
|
-
const sProblems = sectionConcepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
|
|
657
|
-
sectionBreakdown.push({ section: section.id, concepts: sectionConcepts.length, kps: sKps, problems: sProblems });
|
|
658
|
-
}
|
|
659
|
-
const unsectioned = concepts.filter((c) => !c.section);
|
|
660
|
-
if (unsectioned.length > 0) {
|
|
661
|
-
const uKps = unsectioned.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
|
|
662
|
-
const uProblems = unsectioned.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
|
|
663
|
-
sectionBreakdown.push({ section: '(unsectioned)', concepts: unsectioned.length, kps: uKps, problems: uProblems });
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
return {
|
|
667
|
-
courseName: data.course.name,
|
|
668
|
-
courseId: data.course.id,
|
|
669
|
-
version: data.course.version,
|
|
670
|
-
estimatedHours: data.course.estimatedHours,
|
|
671
|
-
concepts: concepts.length,
|
|
672
|
-
authoredConcepts: authoredConcepts.length,
|
|
673
|
-
stubConcepts: stubConcepts.length,
|
|
674
|
-
knowledgePoints: kpCount,
|
|
675
|
-
problems: problemCount,
|
|
676
|
-
graphDepth,
|
|
677
|
-
conceptsWithoutKps: conceptsWithoutKps.length,
|
|
678
|
-
conceptsWithoutKpsList: conceptsWithoutKps,
|
|
679
|
-
kpsWithoutProblems: kpsWithoutProblems.length,
|
|
680
|
-
kpsWithoutProblemsList: kpsWithoutProblems,
|
|
681
|
-
sections: sectionBreakdown,
|
|
682
|
-
};
|
|
683
|
-
}
|
|
684
|
-
// ─── Fill concept helper (mirrors packages/cli/src/commands/fill-concept.ts) ─
|
|
685
|
-
function fillConcept(yamlStr, conceptId, options) {
|
|
686
|
-
const raw = yaml.load(yamlStr);
|
|
687
|
-
const parsed = shared_1.CourseYamlSchema.safeParse(raw);
|
|
688
|
-
if (!parsed.success) {
|
|
689
|
-
throw new Error(`Invalid course YAML: ${parsed.error.issues[0]?.message ?? 'unknown error'}`);
|
|
690
|
-
}
|
|
691
|
-
const data = parsed.data;
|
|
692
|
-
const concept = data.concepts.find((c) => c.id === conceptId);
|
|
693
|
-
if (!concept) {
|
|
694
|
-
throw new Error(`Concept "${conceptId}" not found. Available: ${data.concepts.map((c) => c.id).join(', ')}`);
|
|
695
|
-
}
|
|
696
|
-
if (concept.knowledgePoints.length > 0) {
|
|
697
|
-
throw new Error(`Concept "${conceptId}" already has ${concept.knowledgePoints.length} KP(s). Remove them first to regenerate.`);
|
|
698
|
-
}
|
|
699
|
-
const kpCount = options.kps ?? 2;
|
|
700
|
-
const problemsPerKp = options.problemsPerKp ?? 3;
|
|
701
|
-
const newKps = [];
|
|
702
|
-
for (let i = 1; i <= kpCount; i++) {
|
|
703
|
-
const problems = [];
|
|
704
|
-
for (let j = 1; j <= problemsPerKp; j++) {
|
|
705
|
-
problems.push({
|
|
706
|
-
id: `${conceptId}-kp${i}-p${j}`,
|
|
707
|
-
type: 'multiple_choice',
|
|
708
|
-
question: `TODO: Write question ${j} for ${conceptId} KP${i}`,
|
|
709
|
-
options: ['Option A', 'Option B', 'Option C', 'Option D'],
|
|
710
|
-
correct: 0,
|
|
711
|
-
explanation: 'TODO: Explain the correct answer',
|
|
712
|
-
difficulty: Math.min(j + 1, 5),
|
|
713
|
-
});
|
|
714
|
-
}
|
|
715
|
-
newKps.push({
|
|
716
|
-
id: `${conceptId}-kp${i}`,
|
|
717
|
-
instruction: `TODO: Write instruction for ${concept.name} — knowledge point ${i}`,
|
|
718
|
-
workedExample: `TODO: Write a worked example for ${concept.name} — knowledge point ${i}`,
|
|
719
|
-
problems,
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
// Rebuild the raw object to preserve structure
|
|
723
|
-
const rawObj = raw;
|
|
724
|
-
const concepts = rawObj['concepts'];
|
|
725
|
-
const targetConcept = concepts.find((c) => c['id'] === conceptId);
|
|
726
|
-
if (targetConcept) {
|
|
727
|
-
targetConcept['knowledgePoints'] = newKps;
|
|
728
|
-
}
|
|
729
|
-
return yaml.dump(rawObj, { lineWidth: 120, noRefs: true });
|
|
104
|
+
function dumpYaml(obj) {
|
|
105
|
+
return yaml.dump(obj, YAML_DUMP_OPTS);
|
|
730
106
|
}
|
|
731
107
|
const TOOLS = [
|
|
732
108
|
{
|
|
@@ -828,9 +204,9 @@ A score of 10/10 is required for publishing. Run this before graspful_import_cou
|
|
|
828
204
|
name: 'graspful_import_course',
|
|
829
205
|
description: `Import a course YAML into a Graspful organization. Creates the course as a draft by default.
|
|
830
206
|
|
|
831
|
-
IMPORTANT: Requires authentication. If not authenticated,
|
|
207
|
+
IMPORTANT: Requires authentication. If not authenticated, run \`graspful register\` in a terminal first or set the \`GRASPFUL_API_KEY\` environment variable. Without auth, this tool will fail.
|
|
832
208
|
|
|
833
|
-
If publish=true, the server runs the review gate first
|
|
209
|
+
If publish=true, the server runs the review gate first - the course must pass all 10 quality checks to be published. If review fails, the course is imported as a draft and failures are returned.
|
|
834
210
|
|
|
835
211
|
Returns { courseId, url, published, reviewFailures? }.`,
|
|
836
212
|
inputSchema: {
|
|
@@ -845,9 +221,9 @@ Returns { courseId, url, published, reviewFailures? }.`,
|
|
|
845
221
|
},
|
|
846
222
|
{
|
|
847
223
|
name: 'graspful_publish_course',
|
|
848
|
-
description: `Publish a draft course (sets isPublished = true). The server runs the review gate
|
|
224
|
+
description: `Publish a draft course (sets isPublished = true). The server runs the review gate - course must pass all 10 quality checks.
|
|
849
225
|
|
|
850
|
-
IMPORTANT: Requires authentication. If not authenticated,
|
|
226
|
+
IMPORTANT: Requires authentication. If not authenticated, run \`graspful register\` in a terminal first or set the \`GRASPFUL_API_KEY\` environment variable. Without auth, this tool will fail.
|
|
851
227
|
|
|
852
228
|
Returns { courseId, published }.`,
|
|
853
229
|
inputSchema: {
|
|
@@ -881,7 +257,7 @@ Use this to check your progress: "How many concepts still need content?"`,
|
|
|
881
257
|
},
|
|
882
258
|
{
|
|
883
259
|
name: 'graspful_create_brand',
|
|
884
|
-
description: `Generate a brand YAML scaffold for a white-label learning site. Graspful supports multi-tenant white-labeling
|
|
260
|
+
description: `Generate a brand YAML scaffold for a white-label learning site. Graspful supports multi-tenant white-labeling - each brand gets its own domain, theme, landing page, and SEO config.
|
|
885
261
|
|
|
886
262
|
Niche presets: education, healthcare, finance, tech, legal. Each sets appropriate colors, taglines, and copy.
|
|
887
263
|
|
|
@@ -891,13 +267,13 @@ The returned YAML has the full brand structure:
|
|
|
891
267
|
- landing: hero, features, how-it-works, FAQ
|
|
892
268
|
- seo: title, description, keywords
|
|
893
269
|
|
|
894
|
-
Edit the YAML to customize, then import with graspful_import_brand
|
|
270
|
+
Edit the YAML to customize, then import with \`graspful_import_brand\`.`,
|
|
895
271
|
inputSchema: {
|
|
896
272
|
type: 'object',
|
|
897
273
|
properties: {
|
|
898
274
|
niche: { type: 'string', description: 'Brand niche: education, healthcare, finance, tech, or legal' },
|
|
899
275
|
name: { type: 'string', description: 'Brand name (default: "{Niche} Academy")' },
|
|
900
|
-
domain: { type: 'string', description: 'Custom domain (default: "{slug}.graspful.
|
|
276
|
+
domain: { type: 'string', description: 'Custom domain (default: "{slug}.graspful.ai")' },
|
|
901
277
|
orgSlug: { type: 'string', description: 'Organization slug to associate with' },
|
|
902
278
|
},
|
|
903
279
|
required: ['niche'],
|
|
@@ -907,7 +283,7 @@ Edit the YAML to customize, then import with graspful_import_brand.`,
|
|
|
907
283
|
name: 'graspful_import_brand',
|
|
908
284
|
description: `Import a brand YAML into Graspful. Creates the white-label site configuration.
|
|
909
285
|
|
|
910
|
-
IMPORTANT: Requires authentication. If not authenticated,
|
|
286
|
+
IMPORTANT: Requires authentication. If not authenticated, run \`graspful register\` in a terminal first or set the \`GRASPFUL_API_KEY\` environment variable. Without auth, this tool will fail.
|
|
911
287
|
|
|
912
288
|
Returns { slug, domain, verificationStatus }.`,
|
|
913
289
|
inputSchema: {
|
|
@@ -922,7 +298,7 @@ Returns { slug, domain, verificationStatus }.`,
|
|
|
922
298
|
name: 'graspful_list_courses',
|
|
923
299
|
description: `List all courses in a Graspful organization.
|
|
924
300
|
|
|
925
|
-
IMPORTANT: Requires authentication. If not authenticated,
|
|
301
|
+
IMPORTANT: Requires authentication. If not authenticated, run \`graspful register\` in a terminal first or set the \`GRASPFUL_API_KEY\` environment variable. Without auth, this tool will fail.
|
|
926
302
|
|
|
927
303
|
Returns an array of courses with their IDs, names, published status, and stats.`,
|
|
928
304
|
inputSchema: {
|
|
@@ -933,24 +309,6 @@ Returns an array of courses with their IDs, names, published status, and stats.`
|
|
|
933
309
|
required: ['org'],
|
|
934
310
|
},
|
|
935
311
|
},
|
|
936
|
-
{
|
|
937
|
-
name: 'graspful_register',
|
|
938
|
-
description: `Create a new Graspful account and organization. Returns an API key that authenticates all subsequent tool calls.
|
|
939
|
-
|
|
940
|
-
Call this BEFORE using graspful_import_course, graspful_publish_course, graspful_import_brand, or graspful_list_courses. Those tools require authentication and will fail without it.
|
|
941
|
-
|
|
942
|
-
You do NOT need to register to use graspful_scaffold_course, graspful_fill_concept, graspful_validate, graspful_review_course, graspful_describe_course, or graspful_create_brand — those work offline.
|
|
943
|
-
|
|
944
|
-
Returns { userId, orgSlug, apiKey }. The API key is automatically used for subsequent authenticated tool calls in this session.`,
|
|
945
|
-
inputSchema: {
|
|
946
|
-
type: 'object',
|
|
947
|
-
properties: {
|
|
948
|
-
email: { type: 'string', description: 'Email address for the new account' },
|
|
949
|
-
password: { type: 'string', description: 'Password (min 8 characters)' },
|
|
950
|
-
},
|
|
951
|
-
required: ['email', 'password'],
|
|
952
|
-
},
|
|
953
|
-
},
|
|
954
312
|
];
|
|
955
313
|
function textResult(text) {
|
|
956
314
|
return { content: [{ type: 'text', text }] };
|
|
@@ -962,32 +320,65 @@ async function handleToolCall(name, args) {
|
|
|
962
320
|
switch (name) {
|
|
963
321
|
case 'graspful_scaffold_course': {
|
|
964
322
|
const topic = args.topic;
|
|
965
|
-
const
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
323
|
+
const obj = (0, shared_1.scaffoldCourseObject)(topic, {
|
|
324
|
+
hours: args.estimatedHours,
|
|
325
|
+
source: args.sourceDocument,
|
|
326
|
+
});
|
|
327
|
+
mcpCapture('course scaffolded', { topic, estimated_hours: args.estimatedHours });
|
|
328
|
+
return textResult(dumpYaml(obj));
|
|
969
329
|
}
|
|
970
330
|
case 'graspful_fill_concept': {
|
|
971
331
|
try {
|
|
972
|
-
const
|
|
973
|
-
|
|
332
|
+
const conceptId = args.conceptId;
|
|
333
|
+
const raw = parseYaml(args.yaml);
|
|
334
|
+
const updated = (0, shared_1.fillConceptInRaw)(raw, conceptId, {
|
|
335
|
+
kps: args.kps,
|
|
336
|
+
problemsPerKp: args.problemsPerKp,
|
|
337
|
+
});
|
|
338
|
+
mcpCapture('concept filled', { concept_id: conceptId });
|
|
339
|
+
return textResult(dumpYaml(updated));
|
|
974
340
|
}
|
|
975
341
|
catch (e) {
|
|
976
342
|
return errorResult(e instanceof Error ? e.message : String(e));
|
|
977
343
|
}
|
|
978
344
|
}
|
|
979
345
|
case 'graspful_validate': {
|
|
980
|
-
|
|
346
|
+
let raw;
|
|
347
|
+
try {
|
|
348
|
+
raw = parseYaml(args.yaml);
|
|
349
|
+
}
|
|
350
|
+
catch (e) {
|
|
351
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
352
|
+
return textResult(JSON.stringify({ valid: false, errors: [`YAML parse error: ${msg}`], stats: {} }, null, 2));
|
|
353
|
+
}
|
|
354
|
+
const result = (0, shared_1.validateParsedYaml)(raw);
|
|
355
|
+
mcpCapture('course validated', { valid: result.valid, error_count: result.errors.length, file_type: result.fileType });
|
|
981
356
|
return textResult(JSON.stringify(result, null, 2));
|
|
982
357
|
}
|
|
983
358
|
case 'graspful_review_course': {
|
|
984
|
-
|
|
359
|
+
let raw;
|
|
360
|
+
try {
|
|
361
|
+
raw = parseYaml(args.yaml);
|
|
362
|
+
}
|
|
363
|
+
catch (e) {
|
|
364
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
365
|
+
return textResult(JSON.stringify({
|
|
366
|
+
passed: false,
|
|
367
|
+
score: '0/10',
|
|
368
|
+
failures: [{ check: 'yaml_parses', passed: false, details: `YAML parse error: ${msg}` }],
|
|
369
|
+
warnings: [],
|
|
370
|
+
stats: { concepts: 0, kps: 0, problems: 0, authoredConcepts: 0, stubConcepts: 0 },
|
|
371
|
+
}, null, 2));
|
|
372
|
+
}
|
|
373
|
+
const result = (0, shared_1.runQualityGate)(raw);
|
|
374
|
+
mcpCapture('course reviewed', { score: result.score, passed: result.passed });
|
|
985
375
|
return textResult(JSON.stringify(result, null, 2));
|
|
986
376
|
}
|
|
987
377
|
case 'graspful_import_course': {
|
|
988
378
|
try {
|
|
989
379
|
requireApiAuth();
|
|
990
|
-
const result = await
|
|
380
|
+
const result = await apiFetch('POST', `/api/v1/orgs/${args.org}/courses/import`, { yaml: args.yaml, publish: args.publish ?? false });
|
|
381
|
+
mcpCapture('course imported', { course_id: result.courseId, org: args.org, published: result.published });
|
|
991
382
|
return textResult(JSON.stringify(result, null, 2));
|
|
992
383
|
}
|
|
993
384
|
catch (e) {
|
|
@@ -997,7 +388,8 @@ async function handleToolCall(name, args) {
|
|
|
997
388
|
case 'graspful_publish_course': {
|
|
998
389
|
try {
|
|
999
390
|
requireApiAuth();
|
|
1000
|
-
const result = await
|
|
391
|
+
const result = await apiFetch('POST', `/api/v1/orgs/${args.org}/courses/${args.courseId}/publish`, {});
|
|
392
|
+
mcpCapture('course published', { course_id: result.courseId, org: args.org, published: result.published });
|
|
1001
393
|
return textResult(JSON.stringify(result, null, 2));
|
|
1002
394
|
}
|
|
1003
395
|
catch (e) {
|
|
@@ -1006,7 +398,10 @@ async function handleToolCall(name, args) {
|
|
|
1006
398
|
}
|
|
1007
399
|
case 'graspful_describe_course': {
|
|
1008
400
|
try {
|
|
1009
|
-
const
|
|
401
|
+
const raw = parseYaml(args.yaml);
|
|
402
|
+
const parsed = shared_1.CourseYamlSchema.parse(raw);
|
|
403
|
+
const stats = (0, shared_1.describeCourse)(parsed);
|
|
404
|
+
mcpCapture('course described', stats);
|
|
1010
405
|
return textResult(JSON.stringify(stats, null, 2));
|
|
1011
406
|
}
|
|
1012
407
|
catch (e) {
|
|
@@ -1014,24 +409,41 @@ async function handleToolCall(name, args) {
|
|
|
1014
409
|
}
|
|
1015
410
|
}
|
|
1016
411
|
case 'graspful_create_brand': {
|
|
1017
|
-
const
|
|
412
|
+
const niche = args.niche;
|
|
413
|
+
const obj = (0, shared_1.scaffoldBrandObject)(niche, {
|
|
1018
414
|
name: args.name,
|
|
1019
415
|
domain: args.domain,
|
|
1020
416
|
orgSlug: args.orgSlug,
|
|
1021
417
|
});
|
|
1022
|
-
|
|
418
|
+
mcpCapture('brand scaffolded', { niche });
|
|
419
|
+
return textResult(dumpYaml(obj));
|
|
1023
420
|
}
|
|
1024
421
|
case 'graspful_import_brand': {
|
|
1025
422
|
try {
|
|
1026
423
|
requireApiAuth();
|
|
1027
424
|
let raw;
|
|
1028
425
|
try {
|
|
1029
|
-
raw =
|
|
426
|
+
raw = parseYaml(args.yaml);
|
|
1030
427
|
}
|
|
1031
428
|
catch (e) {
|
|
1032
429
|
throw new Error(`YAML parse error: ${e instanceof Error ? e.message : String(e)}`);
|
|
1033
430
|
}
|
|
1034
|
-
const
|
|
431
|
+
const parsed = raw;
|
|
432
|
+
const brandSection = (parsed.brand || {});
|
|
433
|
+
const dto = {
|
|
434
|
+
slug: brandSection.id || brandSection.slug,
|
|
435
|
+
name: brandSection.name,
|
|
436
|
+
domain: brandSection.domain,
|
|
437
|
+
tagline: brandSection.tagline || '',
|
|
438
|
+
logoUrl: brandSection.logoUrl || '/logo.svg',
|
|
439
|
+
orgSlug: brandSection.orgSlug,
|
|
440
|
+
theme: parsed.theme || {},
|
|
441
|
+
landing: parsed.landing || {},
|
|
442
|
+
seo: parsed.seo || {},
|
|
443
|
+
pricing: parsed.pricing || {},
|
|
444
|
+
};
|
|
445
|
+
const result = await apiFetch('POST', '/api/v1/brands', dto);
|
|
446
|
+
mcpCapture('brand imported', { slug: result.slug, domain: result.domain });
|
|
1035
447
|
return textResult(JSON.stringify(result, null, 2));
|
|
1036
448
|
}
|
|
1037
449
|
catch (e) {
|
|
@@ -1041,51 +453,14 @@ async function handleToolCall(name, args) {
|
|
|
1041
453
|
case 'graspful_list_courses': {
|
|
1042
454
|
try {
|
|
1043
455
|
requireApiAuth();
|
|
1044
|
-
const result = await
|
|
456
|
+
const result = await apiFetch('GET', `/api/v1/orgs/${args.org}/courses`);
|
|
457
|
+
mcpCapture('courses listed', { org: args.org, count: result.length });
|
|
1045
458
|
return textResult(JSON.stringify(result, null, 2));
|
|
1046
459
|
}
|
|
1047
460
|
catch (e) {
|
|
1048
461
|
return errorResult(`List failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
1049
462
|
}
|
|
1050
463
|
}
|
|
1051
|
-
case 'graspful_register': {
|
|
1052
|
-
try {
|
|
1053
|
-
const email = args.email;
|
|
1054
|
-
const password = args.password;
|
|
1055
|
-
const { baseUrl } = getApiCredentials();
|
|
1056
|
-
const res = await fetch(`${baseUrl}/api/v1/auth/register`, {
|
|
1057
|
-
method: 'POST',
|
|
1058
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1059
|
-
body: JSON.stringify({ email, password }),
|
|
1060
|
-
});
|
|
1061
|
-
if (!res.ok) {
|
|
1062
|
-
const text = await res.text();
|
|
1063
|
-
let message = `Registration failed (${res.status})`;
|
|
1064
|
-
try {
|
|
1065
|
-
const parsed = JSON.parse(text);
|
|
1066
|
-
if (parsed.message)
|
|
1067
|
-
message = parsed.message;
|
|
1068
|
-
}
|
|
1069
|
-
catch {
|
|
1070
|
-
if (text)
|
|
1071
|
-
message = text;
|
|
1072
|
-
}
|
|
1073
|
-
return errorResult(message);
|
|
1074
|
-
}
|
|
1075
|
-
const data = await res.json();
|
|
1076
|
-
// Set the API key in the environment so subsequent tool calls are authenticated
|
|
1077
|
-
process.env.GRASPFUL_API_KEY = data.apiKey;
|
|
1078
|
-
return textResult(JSON.stringify({
|
|
1079
|
-
userId: data.userId,
|
|
1080
|
-
orgSlug: data.orgSlug,
|
|
1081
|
-
apiKey: data.apiKey,
|
|
1082
|
-
message: `Account created. Organization slug: ${data.orgSlug}. API key is now active for this session — you can call graspful_import_course, graspful_publish_course, and other authenticated tools.`,
|
|
1083
|
-
}, null, 2));
|
|
1084
|
-
}
|
|
1085
|
-
catch (e) {
|
|
1086
|
-
return errorResult(`Registration failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
1087
|
-
}
|
|
1088
|
-
}
|
|
1089
464
|
default:
|
|
1090
465
|
return errorResult(`Unknown tool: ${name}`);
|
|
1091
466
|
}
|
|
@@ -1093,7 +468,7 @@ async function handleToolCall(name, args) {
|
|
|
1093
468
|
// ─── MCP Server ─────────────────────────────────────────────────────────────
|
|
1094
469
|
const server = new index_js_1.Server({
|
|
1095
470
|
name: 'graspful',
|
|
1096
|
-
version: '0.
|
|
471
|
+
version: '0.2.4',
|
|
1097
472
|
}, {
|
|
1098
473
|
capabilities: {
|
|
1099
474
|
tools: {},
|
|
@@ -1115,4 +490,11 @@ main().catch((error) => {
|
|
|
1115
490
|
console.error('Fatal error:', error);
|
|
1116
491
|
process.exit(1);
|
|
1117
492
|
});
|
|
493
|
+
async function shutdown() {
|
|
494
|
+
if (posthogClient)
|
|
495
|
+
await posthogClient.shutdown();
|
|
496
|
+
process.exit(0);
|
|
497
|
+
}
|
|
498
|
+
process.on('SIGTERM', shutdown);
|
|
499
|
+
process.on('SIGINT', shutdown);
|
|
1118
500
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graspful/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "MCP server for Graspful — create adaptive learning courses from AI agents",
|
|
5
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
6
|
"repository": {
|
|
@@ -19,9 +19,10 @@
|
|
|
19
19
|
"dev": "bun x tsc --watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@graspful/shared": "0.2.
|
|
22
|
+
"@graspful/shared": "^0.2.3",
|
|
23
23
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
24
24
|
"js-yaml": "^4.1.0",
|
|
25
|
+
"posthog-node": "^5.28.8",
|
|
25
26
|
"zod": "^3.24.0"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|