Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CLASSROOM_CONFIG_DIRNoDirectory 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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
classroom_list_coursesA

List the Google Classroom courses (classes) the authenticated user is enrolled in or teaches.

Args:

  • course_states (string[]): Filter by state, default ["ACTIVE"]

  • limit (number): Max courses, 1-200 (default 50)

  • response_format ('markdown' | 'json'): default 'markdown'

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:

  • course_id (string): Course ID

  • response_format ('markdown' | 'json')

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:

  • course_id (string): Course ID

  • topic_id (string, optional): Restrict to one topic

  • limit (number): Max items 1-200 (default 50)

  • response_format ('markdown' | 'json')

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:

  • course_id (string): Course ID

  • topic_id (string, optional): Restrict to one topic

  • limit (number): Max items 1-200 (default 50)

  • response_format ('markdown' | 'json')

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:

  • course_id (string): Course ID

  • limit (number): Max items 1-200 (default 30)

  • response_format ('markdown' | 'json')

Returns: Each announcement's id, text, state, creationTime, updateTime, alternateLink, and materials.

classroom_list_rosterA

List students or teachers enrolled in a course.

Args:

  • course_id (string): Course ID

  • role ('students' | 'teachers'): default 'students'

  • limit (number): Max 1-200 (default 100)

  • response_format ('markdown' | 'json')

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:

  • course_id (string): Course ID

  • coursework_id (string): The assignment's id

  • response_format ('markdown' | 'json')

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:

  • course_id (string): Course ID

  • include_announcements (boolean): default true

  • max_per_type (number): per-category cap 1-500 (default 200)

  • response_format ('markdown' | 'json')

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:

  • course_id, coursework_id, submission_id (strings)

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:

  • course_id, coursework_id, submission_id (strings)

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:

  • course_id, coursework_id, submission_id (strings)

  • drive_file_id (string, optional): Drive file to attach

  • link_url (string, optional): URL to attach (provide exactly one)

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:

  • course_id (string), name (string, 1-100 chars)

Returns: The new topic's id and name.

classroom_create_announcementA

Post an announcement to a course stream. Requires teacher rights.

Args:

  • course_id (string), text (string, 1-10000 chars)

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:

  • Google Docs → exported as plain text

  • Google Sheets → exported as CSV

  • Google Slides → exported as plain text

  • text/csv/markdown/html/json/xml/rtf → downloaded directly

  • PDFs, images, and other binary files → returns metadata + link (content can't be rendered as text)

Args:

  • drive_file_id (string): The Drive file id from an attachment's driveFile.driveFile.id

  • response_format ('markdown' | 'json')

Returns: name, mime_type, size, link, and (when readable) content. Long content is truncated to a character limit with a note.

Error Handling:

  • 403/permission → the Drive scope may be missing; re-run npm run auth

  • 404 → the file id is wrong or you lack access to that file

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 npm run auth again, choosing the correct account on the consent screen.

Args:

  • response_format ('markdown' | 'json')

Returns: the authorized account's email, name, and id.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/ymr-gif/classroom-mcp-server'

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