A side-by-side look at the Brightspace D2l MCP and StudioMeyer Academy MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Brightspace D2l MCP for education work as a local process; choose StudioMeyer Academy for education as a local process. You can also run both side by side in one mcpServers block.
get_todo, get_my_courses, get_upcoming_due_dates.academy_welcome, academy_levels, academy_lessons.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Education | Education |
| Quality signal | 65/100 · Great | 61/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 31 | 1 |
| Directory activity | 1 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 17 | 12 |
| Full listing | View Brightspace D2l MCP | View StudioMeyer Academy |
get_todoPrioritized to-do list across all courses: unfinished work due soon, recently overdue work, work not open yet, items to double-check (quizzes), and work already submitted. Use this first when the user asks what to work on, what's left, or what they should do now. For a plain chronological list of deadlines or a custom date range, use get_upcoming_due_dates instead.get_my_coursesFetch your enrolled Brightspace courses with names, codes, and IDs. Use this when the user asks about their courses, enrolled classes, what they're taking this semester, or needs a course ID for other queries.get_upcoming_due_datesUpcoming due dates across all courses, with whether each assignment is already submitted (submissionStatus: submitted, graded, draft, not_submitted, not_open_yet, closed, past_due, restricted, unknown). Dates are UTC ISO strings; convert to the user's local time. Use for deadlines, what's due and date ranges, in date order. For advice on what to do first, use get_todo instead.get_my_gradesFetch your grade breakdown for a specific course or all enrolled courses. Shows grade items with points, percentages, and comments. Use this when the user asks about grades, scores, marks, GPA, academic performance, or how they're doing in a class.get_announcementsFetch recent announcements from your courses. Can filter to a specific course or get announcements across all courses. Use this when the user asks about announcements, news, updates from instructors, recent posts, or what professors said.get_assignmentsFetch assignments and quizzes for a specific course or all enrolled courses. Shows dropbox submissions and quizzes with due dates, status, and rubric info. Use this when the user asks about assignments, homework, what to submit, quizzes, or assignment details and rubrics.get_assignment_filesRead the files an instructor attached to an assignment: the spec or instructions PDF, a starter workbook, a rubric document. Call it with just courseId to see which assignments have attachments, then with folderId and fileId to read one. Use this when the user asks what an assignment requires, what the instructions say, or to summarize a handout. Returns the text itself. Use download_file instead when the user wants the file saved to disk.get_course_contentFetch the content tree for a course showing modules, topics, files, and links. Use this when the user asks about course materials, lecture slides, uploaded files, content structure, or what's in a course module. Use moduleTitle to filter to a specific module (e.g. 'Labs', 'Staff', 'Homeworks') instead of fetching the entire tree. Use maxDepth to limit recursion depth for a table-of-contents view.download_fileDownload a file from course content or assignment submissions to a local directory. Use this when the user wants to download, save, or get a file from Brightspace course content or dropbox submissions. IMPORTANT: You MUST ask the user where they want to save the file before calling this tool. Never guess or assume a download directory. After identifying the file to download, suggest a clean readable filename to the user (e.g., 'Lecture 7 - Memory Management.pdf' instead of 'L07_CS251_2026SP_v2.pdf') and ask if they'd like to rename it. Pass their preferred name as customFilename, or omit it to keep the original.get_classlist_emailsFetch all email addresses for everyone in a course: instructors, TAs, and students. Use this when the user wants a list of emails for a class, needs to email the whole class, or wants contact info for everyone enrolled. Returns emails only, with no names or roles. For names, roles or finding a specific instructor or TA, use get_roster instead.get_rosterFetch the roster for a course including instructors, TAs, and optionally students with their names, emails, and roles. Use this when the user asks about classmates, instructor contact info, TA emails, professor names, or who's in a class. By default returns only instructors and TAs for privacy. Use includeStudents to get full class list. For just a plain list of email addresses to copy or email everyone, use get_classlist_emails instead.get_syllabusFetch the syllabus/overview text and optional attachment for a course. Returns the course overview description as markdown. If downloadPath is provided, also downloads the syllabus attachment (e.g. PDF). IMPORTANT: You MUST ask the user where they want to save the file before calling this tool with a downloadPath.academy_welcomeALWAYS call this first when a user connects or asks what this is. Returns a short orientation for StudioMeyer Academy — a free 6-level 'Memory-First AI Operator' curriculum (Levels 1-3 fundamentals, 4-6 memory/MCP/multi-agent), plus playbooks and build recipes. Read it back to the user in their language and offer to start at their level.academy_levelsList the 6 curriculum levels with title, subtitle and lesson count. Use to show the user the learning path and ask where they want to start.academy_lessonsList all lessons in a level (titles, descriptions, duration). No body — call academy_lesson for the full text.academy_lessonGet the FULL text of one lesson. Teach it to the user: explain it in your own words, answer questions, give examples. This is how a user 'takes the course' with you as tutor.academy_playbooksList hands-on playbooks (short, practical how-tos for Claude Code, MCP, memory, agents). Optional category filter.academy_playbookGet the full text of one playbook by slug.academy_recipesList build recipes — step-by-step guides to build, deploy and ship real MCP servers and agent systems, organised by phase (1-16). Optional phase filter. Recipes are English-only (no locale parameter); lessons and playbooks exist in de/en/es.academy_recipeGet the full text of one build recipe by slug. English-only — recipes are not translated.academy_searchSearch the whole curriculum (lessons + playbooks + recipes) by keyword. Returns ranked matches with snippets and ids. Use when the user asks about a topic and you want the most relevant material.academy_tutor_contextGet a lesson packaged as a tutoring brief: the full lesson text plus its learning goals and the level context. Call this when the user wants to be *taught* a lesson — then YOU act as their tutor using this material (no Academy account needed, you are the tutor).searchSearch StudioMeyer Academy course material. Returns a list of matching lessons, playbooks and recipes with ids you can pass to `fetch`.fetchFetch the full text of one Academy item (lesson, playbook or recipe) by the id returned from `search`.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"brightspace-d2l-mcp": {
"command": "npx",
"args": [
"-y",
"brightspace-d2l-mcp"
]
}
}
}
{
"mcpServers": {
"studiomeyer-academy": {
"command": "npx",
"args": [
"-y",
"mcp-academy"
]
}
}
}