Skip to main content
Glama

Brightspace MCP 서버

제작: Rohan Muppa, 퍼듀 대학교 ECE

AI와 대화하며 Brightspace 강의를 관리하세요. 성적, 마감일, 공지사항 등에 대해 질문할 수 있습니다. Claude, ChatGPT, Cursor 및 Windsurf와 호환됩니다.

이 서버는 MCP(Model Context Protocol) 서버로, AI를 D2L Brightspace에 연결하여 성적, 과제, 강의 계획서 및 강의 콘텐츠를 필요할 때마다 가져올 수 있게 해줍니다.

퍼듀 대학교, USC를 포함하여 D2L Brightspace를 사용하는 수백 개의 학교에서 작동합니다.

사용해 보기

"강의 슬라이드를 다운로드해서 대화형 플래시카드로 만들어 줘" "모든 과제 루브릭을 가져와서 A 학점을 받기 위해 무엇을 해야 하는지 시각적 대시보드로 만들어 줘"

Related MCP server: unofficial-magister-mcp

설치

필수 사항: Node.js 18+ (LTS 버전 다운로드)

옵션 1: AI가 자동으로 수행하도록 하기

Claude Code, Cursor, Windsurf, Copilot, Codex 또는 기타 AI 코딩 어시스턴트에 다음을 붙여넣으세요:

Install brightspace-mcp-server for me by following
https://github.com/RohanMuppa/brightspace-mcp-server/blob/main/LLMs.md
(use --purdue if I'm at Purdue).

옵션 2: 직접 실행하기

npx brightspace-mcp-server setup

퍼듀 대학교 학생은 --purdue를 추가하여 학교 URL 입력을 건너뛸 수 있습니다:

npx brightspace-mcp-server setup --purdue

마법사가 로그인, MFA 과정을 안내하며 Claude Desktop과 Cursor를 자동으로 구성합니다. 완료 후 AI 클라이언트를 다시 시작하세요.

사용 중인 클라이언트의 문서에서 MCP 서버 추가 방법을 검색하세요. 등록할 서버 명령어는 다음과 같습니다:

npx -y brightspace-mcp-server@latest

Windows에서는 npx를 다음과 같이 감싸야 합니다: cmd /c npx -y brightspace-mcp-server@latest

자격 증명을 저장하려면 먼저 npx brightspace-mcp-server setup을 실행해야 합니다.

세션 만료 시

세션은 자동으로 재인증됩니다. 자동 재인증이 실패하는 경우(예: Duo 푸시 알림을 놓친 경우):

npx brightspace-mcp-server auth

질문 가능한 내용

주제

예시

성적

"모든 수업을 통과하고 있나요?" · "모든 과목의 성적을 비교해 줘"

과제

"앞으로 48시간 내에 마감인 과제는?" · "아직 제출하지 않은 모든 과제를 요약해 줘"

공지사항

"오늘 교수님이 올린 중요한 공지가 있나요?" · "이번 주 CS 교수님이 공지한 내용은?"

강의 콘텐츠

"중간고사 복습 슬라이드 찾아 줘" · "5단원의 모든 PDF를 다운로드해 줘"

수강생 명단

"ECE 264 조교가 누구인가요?" · "강사 이메일 주소를 알려 줘"

토론

"최종 프로젝트 스레드에서 사람들이 뭐라고 하나요?" · "최신 토론 게시물을 요약해 줘"

계획

"다가오는 마감일을 기준으로 학습 일정을 짜 줘" · "지금 가장 신경 써야 할 수업은 무엇인가요?"

보안

  • 자격 증명은 사용자의 컴퓨터(~/.brightspace-mcp/config.json, 제한된 권한)에만 저장됩니다.

  • 세션 토큰은 암호화됩니다(AES-256-GCM).

  • Brightspace로 향하는 모든 트래픽은 HTTPS를 사용합니다.

  • 학교 로그인 페이지 외에는 그 어디로도 데이터가 전송되지 않습니다.

기여 및 포크

학교를 추가하거나, 새로운 도구를 만들거나, 문제를 수정하고 싶으신가요? 저장소를 포크하고 변경 사항을 적용한 뒤 풀 리퀘스트를 보내주세요. 병합되면 모든 사용자에게 자동으로 배포됩니다.

git clone https://github.com/RohanMuppa/brightspace-mcp-server.git
cd brightspace-mcp-server
npm install
npm run dev

학교 추가: src/setup.tsSCHOOL_PRESETS에 프리셋을 추가하세요. 학교의 로그인 흐름이 다른 경우 src/auth/에 핸들러를 추가하세요.

새 도구 추가: src/tools/에 파일을 만들고, schemas.ts에 스키마를 추가한 뒤, src/tools/index.ts에서 내보내고 src/index.ts에 등록하세요. 기존 도구를 템플릿으로 사용하세요.

직접 빌드하여 실행: 포크하여 독립적으로 실행할 수도 있습니다. 클론하고 빌드한 뒤, npx 대신 로컬의 build/index.js를 가리키도록 AI 클라이언트를 설정하세요. npm은 필요하지 않습니다. 단, 포크 버전은 이 저장소의 업데이트를 자동으로 받지 않는다는 점을 유의하세요. 변경 사항이 다른 사람들에게 도움이 될 수 있다면 PR을 고려해 보세요.

MIT 라이선스에 따라 배포됩니다.

업데이트

자동입니다. AI 클라이언트가 세션을 시작할 때마다 npx brightspace-mcp-server@latest가 실행되어 npm에서 최신 버전을 가져옵니다. 별도의 작업은 필요하지 않습니다.

이전 버전을 사용 중이라고 의심되는 경우 npm cache clean --force를 실행하여 캐시를 삭제하세요.


Boilermakers를 위해 Rohan Muppa가 제작함 🚂

버그 신고 · MIT · Copyright 2026 Rohan Muppa

Available Tools

13 tools
check_authCheck Authentication StatusA

Check if you are authenticated with Brightspace. Run the brightspace-auth CLI first to authenticate. Use this when the user asks if they're logged in, if authentication is working, or when other tools return auth errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description implies read-only check and suggests appropriate usage context. Lacks detail on return value or potential error states, but sufficient for simple auth check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, dramatically front-loaded. First sentence states purpose, second gives prerequisites, third lists use cases. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no output schema tool, description fully explains what it does, prerequisites, and when to use it. Complements sibling tools well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters defined; schema covers 100%. Description does not add parameter info, but with zero parameters, baseline is 4 per guidelines.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool checks authentication status with Brightspace. Distinct from siblings which handle file downloads, course content, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to run a CLI first, specifies when to use: when user asks about login status or when auth errors occur from other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_fileDownload FileA

Download 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdNoSpecific file ID within a dropbox submission.
topicIdNoContent topic ID to download (for course content files).
courseIdYesCourse ID the file belongs to.
folderIdNoDropbox folder ID (for submission/feedback file downloads).
downloadPathYesAbsolute path to the directory where the file should be saved.
customFilenameNoCustom filename for the downloaded file (include extension). If not provided, uses the original filename from Brightspace.

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the tool downloads (writes) files and mentions user interaction (asking for path/rename). However, it lacks details on overwrite behavior, permissions, size limits, or error handling, which are important for a file download operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is 4 sentences with no fluff. It immediately states the purpose, then provides usage context, and ends with actionable guidelines. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and no annotations, the description is thorough in covering purpose, usage, and parameter context. It lacks only minor behavioral details (e.g., overwrite). Overall, it is well-rounded for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds significant value: it explains the two types of file sources (course content via topicId vs dropbox via folderId/fileId) and how customFilename works. It also advises on when to use each parameter, going beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download a file from course content or assignment submissions to a local directory' with a specific verb ('download') and resource ('file from course content or dropbox submissions'). It distinguishes from sibling tools (no other download tools exist) and provides context for use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this when 'the user wants to download, save, or get a file from Brightspace course content or dropbox submissions'. It includes critical guidance: 'You MUST ask the user where they want to save the file before calling this tool' and suggests suggesting a clean filename, giving concrete examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_announcementsGet AnnouncementsA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMaximum number of announcements to return
courseIdNoCourse ID to get announcements for. If omitted, returns recent announcements across all courses.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Implies read-only operation via 'fetch', but omits details like recency definition or impact of missing parameters. No annotations present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded purpose and actionable usage hints. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple 2-parameter tool with no output schema. Could clarify 'recent' timeframe but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema already describes both parameters fully (100% coverage). Description adds marginal value by linking courseId absence to cross-course results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool fetches announcements, distinguishes from siblings like get_assignments or get_discussions, and specifies filtering options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage examples (announcements, news, updates) but lacks exclusion guidance or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assignment_filesGet Assignment FilesA

Read 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileIdNoAttachment file ID to read. Requires folderId. Omit to list the files without reading them.
courseIdYesCourse ID whose assignment attachments to look at.
folderIdNoAssignment (dropbox folder) ID. Omit to list every assignment in the course that has attachments.
maxCharsNoMaximum characters of extracted text to return. The response reports whether it was truncated.
extractTextNoExtract readable text from the file. Works for PDF, DOCX, XLSX, PPTX, and plain text.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly states that the tool reads and 'Returns the text itself,' implying a read-only operation rather than a download. It does not mention auth requirements or unsupported file type edge cases, but core behavior is transparent enough for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: resource identification, call patterns, use cases, return behavior, and the sibling alternative are all covered in three compact sentences. The core purpose is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description still covers the main invocation modes, the output nature, the supported file formats via schema, and the key sibling alternative. An agent has enough context to call this tool correctly without further investigation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful workflow semantics: 'Call it with just courseId to see which assignments have attachments, then with folderId and fileId to read one.' This clarifies parameter relationships beyond the schema field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete action and resource: 'Read the files an instructor attached to an assignment,' and names likely file types (PDF, workbook, rubric). It also distinguishes itself from the sibling download_file by contrasting reading versus saving, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use conditions: 'when the user asks what an assignment requires, what the instructions say, or to summarize a handout.' It also names the alternative: 'Use download_file instead when the user wants the file saved to disk.' It even prescribes a two-step call pattern, which removes ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assignmentsGet AssignmentsA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdNoCourse ID to get assignments for. If omitted, returns assignments for all enrolled courses.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the operation is a fetch (read-only) and describes returned data. No contradictions; additional behavioral details like authentication or pagination are not critical for a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, concise and front-loaded. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description provides adequate detail about return values (dropbox submissions and quizzes with due dates, status, rubric info). Could mention if results are paginated, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with parameter 'courseId' described. Description adds crucial context: omitting it returns assignments for all enrolled courses. This adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Fetch assignments and quizzes' with specific resources (dropbox submissions, quizzes) and details (due dates, status, rubric info). It distinguishes itself from siblings like get_course_content or get_my_grades by specifying the data type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use this when the user asks about assignments, homework, what to submit, quizzes, or assignment details and rubrics.' Does not mention when not to use or alternatives, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_classlist_emailsGet Classlist EmailsA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesCourse ID to get emails for.

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description fails to disclose authentication requirements, side effects, or any behavioral traits. It implies a read operation but without explicit statement, leaving the agent without critical safety cues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, front-loaded with purpose then usage scenarios. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with one parameter. Description covers purpose and usage but omits return format (e.g., list of emails, comma-separated). Adequate but could improve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers the single parameter with a description. The tool description does not add additional semantic value beyond the schema, meeting baseline for 100% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches email addresses for all roles (instructors, TAs, students) in a course. It uses specific verb and resource, and distinguishes from siblings like get_roster by focusing solely on emails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage scenarios such as when the user wants a list of emails for a class. Lacks explicit when-not-to-use or alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_course_contentGet Course ContentA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesCourse ID to get content tree for.
maxDepthNoLimit recursive depth of the content tree. Depth 1 returns top-level modules with direct children only. Useful for getting a table of contents without all nested content.
typeFilterNoOptional filter to narrow results by content type.all
moduleTitleNoCase-insensitive substring match on module titles. Only returns modules whose title contains this string (e.g. 'Labs', 'Staff', 'Homeworks'). Children of matching modules are included in full.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It describes 'fetch' implying read-only, but does not explicitly state no side effects or auth requirements. However, it gives clear behavioral insights on filtering and depth, which is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, followed by usage and parameter tips. No wasteful words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, full schema coverage, and no output schema, the description covers key use cases and parameter usage. It mentions the content tree components (modules, topics, files, links), but could provide more detail on the return structure. Still, it's sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline is 3. The description adds practical usage guidance for moduleTitle and maxDepth beyond the schema descriptions, such as 'table-of-contents view', improving parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a course content tree listing modules, topics, files, and links. It distinguishes from sibling tools like get_assignments or get_discussions by focusing on course materials and structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool (user asks about course materials, lecture slides, etc.) and provides parameter guidance (moduleTitle, maxDepth). It does not explicitly state when not to use, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_discussionsGet DiscussionsA

Fetch discussion board content for a course including forums, topics, and posts. Use this when the user asks about discussion boards, forum posts, class discussions, or wants to see what's been posted. Provide just courseId to list all forums and their topics. Add forumId to get topics and posts for a specific forum. Add both forumId and topicId to get all posts in a specific discussion topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
forumIdNoSpecific forum ID to get topics and posts for. If omitted, returns all forums.
topicIdNoSpecific topic ID to get posts for. Requires forumId.
courseIdYesCourse ID to get discussion boards for.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description focuses on functionality without mentioning behavioral traits like read-only nature, authentication needs, or side effects. For a fetch operation, this is adequate but could be more transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences. Front-loaded with purpose. No redundant information. Efficiently conveys parameter combinations and usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 100% schema coverage, no output schema, and no annotations, the description is complete for a simple fetch tool. It covers all parameter scenarios. Lacks mention of return format or whether it's read-only, but these are not critical for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all parameters with descriptions. Description adds significant value by explaining how parameters interact hierarchically (e.g., just courseId lists forums, add forumId for topics, add topicId for posts). This clarifies usage beyond individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Fetch' and resource 'discussion board content for a course including forums, topics, and posts'. It distinguishes from sibling tools like get_announcements and get_assignments which cover different content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'when the user asks about discussion boards, forum posts, class discussions, or wants to see what's been posted.' Provides parameter usage patterns but does not mention when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_coursesGet My CoursesA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeOnlyNoOnly return currently active courses. Defaults to the server's configured activeOnly setting (true unless overridden).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral disclosure burden. 'Fetch' clearly indicates a read-only operation and 'your enrolled' defines scope, but it does not disclose authentication requirements, error behavior, or the fact that the result is a list. It is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy. The first sentence states the core purpose, and the second provides actionable usage triggers. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description covers the essential context: what is returned and when to use it. It could mention that no other prerequisites exist or how results are ordered, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter activeOnly is fully described in the input schema, including its default behavior, so the schema covers the parameter semantics completely. The description adds no parameter-specific guidance, which is acceptable given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Fetch') and resource ('your enrolled Brightspace courses') and enumerates the fields returned (names, codes, IDs). It is unambiguously distinct from siblings like get_course_content or get_roster, so an agent can immediately tell what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit triggers: user asks about courses, enrolled classes, this semester, or needs a course ID for other queries. It does not explicitly mention when not to use it or name alternatives, but the use cases are concrete and sufficient for most situations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_gradesGet My GradesA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdNoCourse ID to get grades for. If omitted, returns grades for all enrolled courses.

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavioral traits. It only mentions output format (points, percentages, comments) but does not state that it is a read-only operation, any permissions needed, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded with key information. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and no output schema, the description provides adequate context: action, scope, output content, and usage hints. Missing explicit read-only declaration, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with a clear description for courseId. The description adds context about the response but no additional parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches grade breakdowns for a specific course or all courses, with specific fields (points, percentages, comments). It distinguishes itself from sibling tools like get_assignments by focusing on grades.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use: when user asks about grades, scores, marks, GPA, academic performance. Does not mention when not to use or alternatives, but the guidance is clear and sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rosterGet Course RosterA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum users to return. Default 100. The response reports the true total and whether it was truncated.
courseIdYesCourse ID to get roster for.
searchTermNoOptional search term to filter by name.
includeStudentsNoInclude students in results. Default is instructors and TAs only.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It reveals a key privacy-related default: 'By default returns only instructors and TAs for privacy' and explains that includeStudents provides the full class list. This goes beyond the schema's default value by adding rationale and context. It does not cover permissions or result formatting, but the central behavioral trait is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The first sentence states the core operation and scope, the second gives concrete usage triggers, and the third explains the default and how to override it. Every sentence earns its place and key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with no output schema and no annotations, the description plus fully documented schema covers the essential aspects: what is returned, default behavior, and when to use it. It does not mention truncation or search filtering, but those are already explained in the parameter descriptions. Minor gap: no explicit note about the response shape, but the content description suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds marginal value by explaining includeStudents in terms of the default privacy behavior, but it does not elaborate on limit, searchTerm, or courseId beyond what the schema already provides. This is adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Fetch the roster for a course' and enumerates the contents (instructors, TAs, optionally students) plus names, emails, and roles. It gives clear use cases (classmates, instructor contact info, TA emails, professor names), but does not explicitly differentiate from the sibling get_classlist_emails, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when the user asks about classmates, instructor contact info, TA emails, professor names, or who's in a class,' giving clear context for when the tool is appropriate. It does not name any alternative tool or provide exclusions, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_syllabusGet Course SyllabusA

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesCourse ID to get syllabus for.
downloadPathNoAbsolute path to the directory where the attachment should be saved.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool returns markdown text, conditionally downloads attachments, and requires user consent for file saving. Without annotations, it covers key behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all essential: purpose, return format, conditional behavior, and critical usage note. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary information for a two-parameter tool: input, output format, conditional download, and user-consent requirement. No output schema needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds value beyond schema by explaining that downloadPath triggers a download and that the text is markdown. Schema already describes both parameters fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch' and the resource 'syllabus/overview text and optional attachment', distinguishing it from sibling tools like get_assignments or get_course_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit instruction to ask the user for file save location before using downloadPath, but does not explicitly state when not to use the tool or suggest alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upcoming_due_datesGet Upcoming Due DatesA

Fetch upcoming due dates across all your courses, derived from the due dates on assignments (dropbox folders) and quizzes themselves. Use this when the user asks about deadlines, what's due, upcoming work, or what they need to do this week.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdNoFilter to a specific course ID
daysAheadNoNumber of days ahead to look for due dates

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It usefully explains that due dates are derived from assignments and quizzes, which adds context beyond the schema. However, it doesn't describe output shape, timezone handling, or whether past-due items are excluded, which are relevant for this kind of aggregation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: one states what the tool does and where the data comes from, the other gives clear usage cues. There is no redundancy or filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, data source, and usage triggers, which is sufficient for a simple read-only aggregation tool with optional parameters. Since there is no output schema, a little more detail about the returned due-date format would make it fully complete, but the core calling context is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both courseId and daysAhead. The description reinforces the default 'across all courses' behavior and the upcoming-time window, but it doesn't add meaningful parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Fetch upcoming due dates across all your courses.' It also clarifies the source (assignments/dropbox folders and quizzes). It doesn't explicitly differentiate from sibling tools like get_assignments, but the aggregated 'across all courses' framing makes the intent clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit trigger conditions: 'when the user asks about deadlines, what's due, upcoming work, or what they need to do this week.' It lacks explicit when-not-to-use guidance or alternative tool names, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv2.0.0
    • Addedget_assignment_files
    • Changedget_my_courses2 fields changed
      • removedInput schema / properties / activeOnly / default
        Removed value: -true
      • changedInput schema / properties / activeOnly / description
        Previous value: -"Only return currently active courses"New value: +"Only return currently active courses. Defaults to the server's configured activeOnly setting (true unless overridden)."
    • Changedget_roster1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum users to return. Default 100. The response reports the true total and whether it was truncated.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 1000,
        +  "type": "integer"
        +}
  2. 2 tool updatesv1.0.4
    • Changeddownload_file1 field changed
      • addedInput schema / properties / customFilename / maxLength
        Added value: +255
    • Changedget_roster1 field changed
      • addedInput schema / properties / searchTerm / maxLength
        Added value: +200
  3. 12 tool updatesv1.0.7
    • First observedcheck_auth
    • First observeddownload_file
    • First observedget_announcements
    • First observedget_assignments
    • First observedget_classlist_emails
    • First observedget_course_content
    • First observedget_discussions
    • First observedget_my_courses
    • First observedget_my_grades
    • First observedget_roster
    • First observedget_syllabus
    • First observedget_upcoming_due_dates

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

Most tools map cleanly to distinct resources, but get_classlist_emails and get_roster overlap significantly since both provide contact/roster information, and get_assignment_files vs download_file could confuse users around file retrieval. Overall, descriptions are detailed enough to resolve most ambiguity.

Naming Consistency5/5

All tools follow a clear verb_noun snake_case convention, with the vast majority using get_ (check_auth and download_file being sensible action verbs). The naming pattern makes the tool surface predictable and easy to navigate.

Tool Count5/5

13 read-only LMS tools is a well-scoped set for a student-facing assistant. Each tool covers a meaningful query category without unnecessary redundancy or bloat.

Completeness4/5

The server comprehensively covers common student read-only needs: authentication, courses, grades, assignments, due dates, announcements, discussions, content, syllabus, and roster/contact info. It lacks any write or submission capabilities, but those appear outside the intended scope, leaving only minor potential gaps like calendar or assignment-submission details.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that connects AI assistants to university D2L Brightspace and Piazza, enabling query of courses, grades, assignments, deadlines, files, and Piazza posts.
    7
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A Model Context Protocol (MCP) server that connects AI coding agents to your Moodle LMS. Fetch assignments, grades, deadlines, and sync everything to Obsidian automatically.
    -