classroom-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CLASSROOM_CONFIG_DIR | No | Directory where configuration and token files are stored. Overrides the default config directory. | ~/.config/classroom-mcp |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| classroom_list_coursesA | List the Google Classroom courses (classes) the authenticated user is enrolled in or teaches. Args:
Returns: Each course's id, name, section, description heading, room, ownerId, enrollmentCode, and courseState. Use the returned course id with the other tools. |
| classroom_list_topicsA | List all topics (the section headers teachers use to group work) within a course. Teachers often use topics to represent units, subjects, or lessons. Args:
Returns: Each topic's topicId and name. Pass topicId to classroom_list_coursework to filter materials/assignments by topic. |
| classroom_list_courseworkA | List coursework (assignments, questions) in a course, including attached materials, due dates, point values, and the topic each belongs to. Args:
Returns: Each item's id, title, description, workType, state, dueDate, maxPoints, topicId, alternateLink, and materials (attachments). |
| classroom_list_materialsA | List CourseWorkMaterials — posted reading/lesson materials that are NOT assignments. These are what teachers typically use for lessons and resources. Args:
Returns: Each material's id, title, description, state, topicId, alternateLink, and its attachments. |
| classroom_list_announcementsA | List announcements posted to a course stream, including any attachments. Args:
Returns: Each announcement's id, text, state, creationTime, updateTime, alternateLink, and materials. |
| classroom_list_rosterA | List students or teachers enrolled in a course. Args:
Returns: Each person's userId and profile name/email (email only if your scope and the domain permit it). |
| classroom_list_submissionsA | List student submissions for a specific assignment. As a student you'll see your own submission(s); as a teacher you'll see all. Args:
Returns: Each submission's id, userId, state (NEW/CREATED/TURNED_IN/RETURNED/RECLAIMED), late flag, assignedGrade, draftGrade, and attachments. Use the submission id with the turn-in / attachment write tools. |
| classroom_dump_courseA | Fetch a course's full structure in one call: every topic with its coursework and materials nested underneath, anything without a topic grouped separately, and optionally the announcement stream. Each item includes its attachments. This is the fastest way to get a complete picture of a class. Args:
Returns: { course, topics: [{ id, name, coursework[], materials[] }], no_topic: { coursework[], materials[] }, announcements[] }. To read the text of any attachment, pass its driveFile.driveFile.id to drive_fetch_file_content. Very large dumps truncate descriptions; use the per-resource tools for full detail. |
| classroom_turn_in_submissionA | Turn in (submit) a student assignment submission. This hands the work to the teacher and is the equivalent of clicking "Turn in". State must currently be CREATED or NEW. Args:
Returns: Confirmation. NOTE: This changes submission state and is not trivially reversible (use classroom_reclaim_submission to pull it back if still allowed). |
| classroom_reclaim_submissionA | Reclaim a turned-in submission (pull it back to make edits), equivalent to "Unsubmit". Only works if the assignment still allows it and state is TURNED_IN. Args:
Returns: Confirmation. |
| classroom_attach_to_submissionA | Attach a Drive file or link to a student submission BEFORE turning it in. Add attachments first, then call classroom_turn_in_submission. Args:
Returns: Confirmation. |
| classroom_create_topicA | Create a new topic in a course. Requires teacher rights on the course; will fail with a permission error for student accounts. Args:
Returns: The new topic's id and name. |
| classroom_create_announcementA | Post an announcement to a course stream. Requires teacher rights. Args:
Returns: The new announcement's id. |
| drive_fetch_file_contentA | Read the text content of a Google Drive file attached to Classroom coursework, materials, or announcements. Handles each type appropriately:
Args:
Returns: name, mime_type, size, link, and (when readable) content. Long content is truncated to a character limit with a note. Error Handling:
|
| classroom_whoamiA | Show which Google account this server is currently authorized as. Use this to confirm the server is pointed at the Google login that actually holds your classes. If it's the wrong account, delete the cached token (token.json) and run Args:
Returns: the authorized account's email, name, and id. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Each list_* tool targets a distinct Classroom resource (courses, topics, coursework, materials, announcements, roster, submissions), and coursework/materials/announcements are explicitly differentiated. Action tools like turn_in, reclaim, and attach have clear, non-overlapping state-transition roles.
The set consistently uses a classroom_verb_noun pattern for nearly all tools, with predictable verbs like list, create, turn_in, reclaim, and attach. Minor exceptions are drive_fetch_file_content (different namespace) and classroom_whoami (not verb_noun), but both are still clear and intentional.
Fifteen tools is at the upper end of the ideal range but every tool earns its place: granular listers, a course dump convenience, submission actions, two create operations, a Drive helper, and an auth-check tool. There is no meaningful redundancy in the set.
The read-side is strong and the student submission lifecycle is well covered. However, the authoring/management surface is incomplete: there is no way to create coursework or materials, update/delete existing announcements, topics, or coursework, or grade/return submissions as a teacher.