Skip to main content
Glama
handlers.js3.07 kB
const createResourceMetadata = (course) => ({ endDate: course.end_at, students: course.total_students }); const parseResourceURI = (uri) => { const parts = uri.split('/'); return { type: parts[3], courseId: parts[4], subType: parts[5], subId: parts[6] }; }; return { async handleListResources(request) { const courses = await canvasAPI.listCourses(['term', 'total_students']); return { resources: courses.map(course => ({ uri: `canvas:///courses/${course.id}`, name: course.name, metadata: createResourceMetadata(course) })) }; }, async handleReadResource(request) { const { type, courseId, subType, subId } = parseResourceURI(request.params.uri); if (!courseId) { throw new Error('Invalid resource URI: missing course ID'); let content; switch (type) { case 'courses': { const [course, modules, assignments] = await Promise.all([ canvasAPI.getCourse(courseId, ['term', 'teachers', 'total_students']), CanvasAPI.listModules(courseId), canvasAPI.listAssignments(courseId, ['submission']) ]); content = { course, modules, assignments }; break; } case 'assignments': { if (subId && subType === 'submissions') { content = await canvasAPI.listSubmissions(courseId, subId, ['submission_comments']); } else { content = await canvasAPI.listAssignments(courseId, ['submission']); } break; } default: throw new Error(`Unsupported resource type: ${type}`); } return { contents: [{ uri: request.params.uri, mimeType: 'application/json', text: JSON.stringify(content, null, 2) }] }; } async; handleSearchResources(request, SearchResourcesRequest); { const query = request.params.query.toLowerCase(); const courses = await canvasAPI.listCourses(['term']); const matchingCourses = courses.filter(course => course.name.toLowerCase().includes(query) || course.course_code.toLowerCase().includes(query)); return { resources: matchingCourses.map(course => ({ uri: `canvas:///courses/${course.id}`, name: course.name, metadata: createResourceMetadata(course) })) }; } async; handleWatchResources(request, WatchResourcesRequest); { return { success: true }; } }, }; export {};

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DMontgomery40/mcp-canvas-lms'

If you have feedback or need assistance with the MCP directory API, please join our Discord server