MewCP Google Classroom MCP Server

Hosted, Stateless & Multitenant Google Classroom MCP server enables AI assistants to manage courses, assignments, coursework, students, and classroom activities through Google Classroom.

Documentation

Manage Google Classroom courses, assignments, and students with Agents.

A Model Context Protocol (MCP) server that exposes Google Classroom's API for managing courses, coursework, announcements, rosters, submissions, and guardians.

Overview

The Google Classroom MCP Server provides full lifecycle management of your Google Classroom environment:

  • Create and manage courses, topics, announcements, and coursework
  • Manage student and teacher rosters, invitations, and guardian links
  • Read and grade student submissions

Perfect for:

  • Educators automating course setup and content distribution
  • Administrators managing rosters and guardian communications at scale
  • Developers building learning management integrations on top of Google Classroom

Tools

Courses

list_courses — List courses the user can view

Returns a list of courses the requesting user is permitted to view, optionally filtered by student, teacher, or course state.

Inputs:

- `student_id`     (string, optional)  — Restrict to courses with this student
- `teacher_id`     (string, optional)  — Restrict to courses with this teacher
- `course_states`  (string, optional)  — Restrict to courses in these states (e.g. ACTIVE, ARCHIVED)
- `page_size`      (integer, optional) — Maximum number of courses to return
- `page_token`     (string, optional)  — Token for the next page of results

Output:

{
  "courses": [
    {
      "id": "123456789",
      "name": "Introduction to Python",
      "section": "Period 1",
      "ownerId": "987654321",
      "courseState": "ACTIVE",
      "enrollmentCode": "abc123",
      "updateTime": "2025-01-15T10:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_course — Get a single course

Returns a course by its identifier.

Inputs:

- `id` (string, required) — Identifier of the course

Output:

{
  "id": "123456789",
  "name": "Introduction to Python",
  "section": "Period 1",
  "ownerId": "987654321",
  "courseState": "ACTIVE",
  "enrollmentCode": "abc123",
  "updateTime": "2025-01-15T10:00:00.000Z"
}
create_course — Create a course

Creates a new course. The requesting user becomes the owner.

Inputs:

- `body` (string, required) — JSON string representing the Course object to create

Output:

{
  "id": "123456789",
  "name": "Introduction to Python",
  "section": "Period 1",
  "ownerId": "987654321",
  "courseState": "PROVISIONED",
  "enrollmentCode": "abc123",
  "updateTime": "2025-01-15T10:00:00.000Z"
}
update_course — Replace a course

Replaces all fields of a course with the provided values.

Inputs:

- `id`   (string, required) — Identifier of the course to update
- `body` (string, required) — JSON string representing the updated Course object

Output:

{
  "id": "123456789",
  "name": "Advanced Python",
  "section": "Period 2",
  "ownerId": "987654321",
  "courseState": "ACTIVE",
  "updateTime": "2025-01-16T09:00:00.000Z"
}
patch_course — Partially update a course

Updates only the fields specified in update_mask.

Inputs:

- `id`           (string, required) — Identifier of the course to patch
- `update_mask`  (string, required) — Comma-separated list of fields to update (e.g. name,section)
- `body`         (string, required) — JSON string with the fields to update

Output:

{
  "id": "123456789",
  "name": "Advanced Python",
  "section": "Period 1",
  "ownerId": "987654321",
  "courseState": "ACTIVE",
  "updateTime": "2025-01-16T09:00:00.000Z"
}
delete_course — Delete a course

Permanently deletes a course. Only course owners may delete a course.

Inputs:

- `id` (string, required) — Identifier of the course to delete

Output:

{}

Course Aliases

create_course_alias — Create a course alias

Creates an alias for a course so it can be referenced by an alternative identifier.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the CourseAlias object

Output:

{
  "alias": "d:intro-python-2025"
}
list_course_aliases — List course aliases

Returns all aliases for a course.

Inputs:

- `course_id`   (string, required)  — Identifier of the course
- `page_size`   (integer, optional) — Maximum number of aliases to return
- `page_token`  (string, optional)  — Token for the next page of results

Output:

{
  "aliases": [
    { "alias": "d:intro-python-2025" },
    { "alias": "d:py101" }
  ]
}
delete_course_alias — Delete a course alias

Removes an alias from a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `alias`     (string, required) — The alias to delete

Output:

{}

Announcements

create_announcement — Create an announcement

Posts a new announcement to a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the Announcement object

Output:

{
  "id": "111222333",
  "courseId": "123456789",
  "text": "Welcome to the course! Please review the syllabus.",
  "state": "PUBLISHED",
  "updateTime": "2025-01-15T10:00:00.000Z",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
list_announcements — List announcements

Returns announcements in a course, optionally filtered by state.

Inputs:

- `course_id`            (string, required)  — Identifier of the course
- `announcement_states`  (string, optional)  — Filter by state (PUBLISHED, DRAFT, DELETED)
- `order_by`             (string, optional)  — Sort order (e.g. updateTime desc)
- `page_size`            (integer, optional) — Maximum number of results
- `page_token`           (string, optional)  — Token for the next page

Output:

{
  "announcements": [
    {
      "id": "111222333",
      "courseId": "123456789",
      "text": "Welcome to the course!",
      "state": "PUBLISHED",
      "updateTime": "2025-01-15T10:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_announcement — Get an announcement

Returns a single announcement.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the announcement

Output:

{
  "id": "111222333",
  "courseId": "123456789",
  "text": "Welcome to the course! Please review the syllabus.",
  "state": "PUBLISHED",
  "updateTime": "2025-01-15T10:00:00.000Z",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
patch_announcement — Update an announcement

Updates only the fields specified in update_mask.

Inputs:

- `course_id`    (string, required) — Identifier of the course
- `id`           (string, required) — Identifier of the announcement
- `update_mask`  (string, required) — Fields to update (e.g. text,state)
- `body`         (string, required) — JSON string with updated fields

Output:

{
  "id": "111222333",
  "courseId": "123456789",
  "text": "Updated announcement text.",
  "state": "PUBLISHED",
  "updateTime": "2025-01-16T09:00:00.000Z"
}
delete_announcement — Delete an announcement

Deletes an announcement. Only draft announcements may be deleted; published announcements must be archived first.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the announcement

Output:

{}
modify_announcement_assignees — Modify announcement assignees

Changes which students an announcement is assigned to.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the announcement
- `body`      (string, required) — JSON string with assignee mode and student IDs

Output:

{
  "id": "111222333",
  "courseId": "123456789",
  "text": "Welcome to the course!",
  "state": "PUBLISHED",
  "assigneeMode": "INDIVIDUAL_STUDENTS",
  "individualStudentsOptions": {
    "studentIds": ["555111", "555222"]
  },
  "updateTime": "2025-01-16T09:00:00.000Z"
}

Course Work

create_course_work — Create a coursework item

Creates an assignment, short-answer question, or multiple-choice question in a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the CourseWork object

Output:

{
  "id": "222333444",
  "courseId": "123456789",
  "title": "Assignment 1: Hello World",
  "description": "Write your first Python program.",
  "workType": "ASSIGNMENT",
  "state": "PUBLISHED",
  "maxPoints": 100,
  "dueDate": { "year": 2025, "month": 2, "day": 1 },
  "dueTime": { "hours": 23, "minutes": 59 },
  "updateTime": "2025-01-15T10:00:00.000Z"
}
list_course_work — List coursework

Returns coursework items in a course, optionally filtered by state.

Inputs:

- `course_id`           (string, required)  — Identifier of the course
- `course_work_states`  (string, optional)  — Filter by state (PUBLISHED, DRAFT, DELETED)
- `order_by`            (string, optional)  — Sort order (e.g. updateTime desc)
- `page_size`           (integer, optional) — Maximum number of results
- `page_token`          (string, optional)  — Token for the next page

Output:

{
  "courseWork": [
    {
      "id": "222333444",
      "courseId": "123456789",
      "title": "Assignment 1: Hello World",
      "workType": "ASSIGNMENT",
      "state": "PUBLISHED",
      "maxPoints": 100,
      "updateTime": "2025-01-15T10:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_course_work — Get a coursework item

Returns a single coursework item.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the coursework item

Output:

{
  "id": "222333444",
  "courseId": "123456789",
  "title": "Assignment 1: Hello World",
  "workType": "ASSIGNMENT",
  "state": "PUBLISHED",
  "maxPoints": 100,
  "dueDate": { "year": 2025, "month": 2, "day": 1 },
  "updateTime": "2025-01-15T10:00:00.000Z"
}
patch_course_work — Update a coursework item

Updates only the fields specified in update_mask.

Inputs:

- `course_id`    (string, required) — Identifier of the course
- `id`           (string, required) — Identifier of the coursework item
- `update_mask`  (string, required) — Fields to update (e.g. title,maxPoints)
- `body`         (string, required) — JSON string with updated fields

Output:

{
  "id": "222333444",
  "courseId": "123456789",
  "title": "Assignment 1: Hello World (Updated)",
  "workType": "ASSIGNMENT",
  "state": "PUBLISHED",
  "maxPoints": 50,
  "updateTime": "2025-01-16T09:00:00.000Z"
}
delete_course_work — Delete a coursework item

Deletes a coursework item.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the coursework item

Output:

{}
modify_course_work_assignees — Modify coursework assignees

Changes which students a coursework item is assigned to.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the coursework item
- `body`      (string, required) — JSON string with assignee mode and student IDs

Output:

{
  "id": "222333444",
  "courseId": "123456789",
  "title": "Assignment 1: Hello World",
  "workType": "ASSIGNMENT",
  "assigneeMode": "INDIVIDUAL_STUDENTS",
  "individualStudentsOptions": {
    "studentIds": ["555111", "555222"]
  },
  "updateTime": "2025-01-16T09:00:00.000Z"
}

Student Submissions

list_student_submissions — List student submissions

Returns submissions for a coursework item, optionally filtered by user or state.

Inputs:

- `course_id`       (string, required)  — Identifier of the course
- `course_work_id`  (string, required)  — Identifier of the coursework item (use `-` for all)
- `user_id`         (string, optional)  — Restrict to submissions by this student
- `states`          (string, optional)  — Filter by state (TURNED_IN, RETURNED, CREATED)
- `page_size`       (integer, optional) — Maximum number of results
- `page_token`      (string, optional)  — Token for the next page

Output:

{
  "studentSubmissions": [
    {
      "id": "333444555",
      "courseId": "123456789",
      "courseWorkId": "222333444",
      "userId": "555111",
      "state": "TURNED_IN",
      "assignedGrade": 95,
      "late": false,
      "updateTime": "2025-01-31T22:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_student_submission — Get a student submission

Returns a single student submission.

Inputs:

- `course_id`       (string, required) — Identifier of the course
- `course_work_id`  (string, required) — Identifier of the coursework item
- `id`              (string, required) — Identifier of the submission

Output:

{
  "id": "333444555",
  "courseId": "123456789",
  "courseWorkId": "222333444",
  "userId": "555111",
  "state": "TURNED_IN",
  "assignedGrade": 95,
  "late": false,
  "updateTime": "2025-01-31T22:00:00.000Z"
}
patch_student_submission — Update a student submission

Updates fields on a submission, such as the assigned grade. Only certain fields may be updated by students or teachers.

Inputs:

- `course_id`       (string, required) — Identifier of the course
- `course_work_id`  (string, required) — Identifier of the coursework item
- `id`              (string, required) — Identifier of the submission
- `update_mask`     (string, required) — Fields to update (e.g. assignedGrade,draftGrade)
- `body`            (string, required) — JSON string with updated fields

Output:

{
  "id": "333444555",
  "courseId": "123456789",
  "courseWorkId": "222333444",
  "userId": "555111",
  "state": "RETURNED",
  "assignedGrade": 95,
  "draftGrade": 95,
  "updateTime": "2025-02-02T09:00:00.000Z"
}
return_student_submission — Return a submission to the student

Returns a turned-in submission to the student. The submission state changes to RETURNED.

Inputs:

- `course_id`       (string, required) — Identifier of the course
- `course_work_id`  (string, required) — Identifier of the coursework item
- `id`              (string, required) — Identifier of the submission

Output:

{}
reclaim_student_submission — Reclaim a submitted assignment

Allows a student to reclaim a turned-in submission for further editing. The submission state changes back to NEW.

Inputs:

- `course_id`       (string, required) — Identifier of the course
- `course_work_id`  (string, required) — Identifier of the coursework item
- `id`              (string, required) — Identifier of the submission

Output:

{}

Course Work Materials

create_course_work_material — Create a course material

Creates a material resource (document, video, link, etc.) in a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the CourseWorkMaterial object

Output:

{
  "id": "444555666",
  "courseId": "123456789",
  "title": "Week 1 Reading: Python Basics",
  "description": "Required reading for Week 1.",
  "state": "PUBLISHED",
  "updateTime": "2025-01-15T10:00:00.000Z",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
list_course_work_materials — List course materials

Returns materials in a course, optionally filtered by Drive item or URL.

Inputs:

- `course_id`          (string, required)  — Identifier of the course
- `material_drive_id`  (string, optional)  — Filter by Google Drive item ID
- `material_link`      (string, optional)  — Filter by material URL
- `page_size`          (integer, optional) — Maximum number of results
- `page_token`         (string, optional)  — Token for the next page

Output:

{
  "courseWorkMaterial": [
    {
      "id": "444555666",
      "courseId": "123456789",
      "title": "Week 1 Reading: Python Basics",
      "state": "PUBLISHED",
      "updateTime": "2025-01-15T10:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_course_work_material — Get a course material

Returns a single course material.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the material

Output:

{
  "id": "444555666",
  "courseId": "123456789",
  "title": "Week 1 Reading: Python Basics",
  "description": "Required reading for Week 1.",
  "state": "PUBLISHED",
  "updateTime": "2025-01-15T10:00:00.000Z"
}
patch_course_work_material — Update a course material

Updates only the fields specified in update_mask.

Inputs:

- `course_id`    (string, required) — Identifier of the course
- `id`           (string, required) — Identifier of the material
- `update_mask`  (string, required) — Fields to update (e.g. title,description)
- `body`         (string, required) — JSON string with updated fields

Output:

{
  "id": "444555666",
  "courseId": "123456789",
  "title": "Week 1 Reading: Python Basics (Updated)",
  "state": "PUBLISHED",
  "updateTime": "2025-01-16T09:00:00.000Z"
}
delete_course_work_material — Delete a course material

Deletes a course material.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the material to delete

Output:

{}

Students

create_student — Enroll a student

Adds a user as a student of a course using an enrollment code.

Inputs:

- `course_id`        (string, required) — Identifier of the course
- `enrollment_code`  (string, required) — Enrollment code of the course
- `body`             (string, required) — JSON string representing the Student object

Output:

{
  "courseId": "123456789",
  "userId": "555111",
  "profile": {
    "id": "555111",
    "name": { "fullName": "Jane Smith" },
    "emailAddress": "[email protected]"
  }
}
list_students — List students

Returns all students enrolled in a course.

Inputs:

- `course_id`   (string, required)  — Identifier of the course
- `page_size`   (integer, optional) — Maximum number of results
- `page_token`  (string, optional)  — Token for the next page

Output:

{
  "students": [
    {
      "courseId": "123456789",
      "userId": "555111",
      "profile": {
        "id": "555111",
        "name": { "fullName": "Jane Smith" },
        "emailAddress": "[email protected]"
      }
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_student — Get a student

Returns a specific student in a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `user_id`   (string, required) — Identifier of the student

Output:

{
  "courseId": "123456789",
  "userId": "555111",
  "profile": {
    "id": "555111",
    "name": { "givenName": "Jane", "familyName": "Smith", "fullName": "Jane Smith" },
    "emailAddress": "[email protected]"
  }
}
delete_student — Remove a student

Removes a student from a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `user_id`   (string, required) — Identifier of the student to remove

Output:

{}

Teachers

create_teacher — Add a teacher

Adds a user as a co-teacher of a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the Teacher object

Output:

{
  "courseId": "123456789",
  "userId": "666111",
  "profile": {
    "id": "666111",
    "name": { "fullName": "Prof. Jones" },
    "emailAddress": "[email protected]"
  }
}
list_teachers — List teachers

Returns all teachers of a course.

Inputs:

- `course_id`   (string, required)  — Identifier of the course
- `page_size`   (integer, optional) — Maximum number of results
- `page_token`  (string, optional)  — Token for the next page

Output:

{
  "teachers": [
    {
      "courseId": "123456789",
      "userId": "666111",
      "profile": {
        "id": "666111",
        "name": { "fullName": "Prof. Jones" },
        "emailAddress": "[email protected]"
      }
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_teacher — Get a teacher

Returns a specific teacher of a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `user_id`   (string, required) — Identifier of the teacher

Output:

{
  "courseId": "123456789",
  "userId": "666111",
  "profile": {
    "id": "666111",
    "name": { "givenName": "Robert", "familyName": "Jones", "fullName": "Prof. Jones" },
    "emailAddress": "[email protected]"
  }
}
delete_teacher — Remove a teacher

Removes a teacher from a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `user_id`   (string, required) — Identifier of the teacher to remove

Output:

{}

Topics

create_topic — Create a topic

Creates a topic in a course to organize coursework and materials.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `body`      (string, required) — JSON string representing the Topic object

Output:

{
  "courseId": "123456789",
  "topicId": "777888999",
  "name": "Unit 1: Variables and Data Types",
  "updateTime": "2025-01-15T10:00:00.000Z"
}
list_topics — List topics

Returns all topics in a course.

Inputs:

- `course_id`   (string, required)  — Identifier of the course
- `page_size`   (integer, optional) — Maximum number of results
- `page_token`  (string, optional)  — Token for the next page

Output:

{
  "topic": [
    {
      "courseId": "123456789",
      "topicId": "777888999",
      "name": "Unit 1: Variables and Data Types",
      "updateTime": "2025-01-15T10:00:00.000Z"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_topic — Get a topic

Returns a single topic.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the topic

Output:

{
  "courseId": "123456789",
  "topicId": "777888999",
  "name": "Unit 1: Variables and Data Types",
  "updateTime": "2025-01-15T10:00:00.000Z"
}
patch_topic — Update a topic

Updates only the fields specified in update_mask.

Inputs:

- `course_id`    (string, required) — Identifier of the course
- `id`           (string, required) — Identifier of the topic
- `update_mask`  (string, required) — Fields to update (e.g. name)
- `body`         (string, required) — JSON string with updated fields

Output:

{
  "courseId": "123456789",
  "topicId": "777888999",
  "name": "Unit 1: Introduction to Python",
  "updateTime": "2025-01-16T09:00:00.000Z"
}
delete_topic — Delete a topic

Deletes a topic from a course.

Inputs:

- `course_id` (string, required) — Identifier of the course
- `id`        (string, required) — Identifier of the topic to delete

Output:

{}

Invitations

create_invitation — Invite a user to a course

Creates an invitation and sends an email asking the user to join a course as a student or teacher.

Inputs:

- `body` (string, required) — JSON string representing the Invitation object (userId, courseId, role)

Output:

{
  "id": "888999111",
  "userId": "555222",
  "courseId": "123456789",
  "role": "STUDENT"
}
list_invitations — List invitations

Returns pending invitations, optionally filtered by user or course.

Inputs:

- `user_id`     (string, optional)  — Restrict to invitations for this user
- `course_id`   (string, optional)  — Restrict to invitations for this course
- `page_size`   (integer, optional) — Maximum number of results
- `page_token`  (string, optional)  — Token for the next page

Output:

{
  "invitations": [
    {
      "id": "888999111",
      "userId": "555222",
      "courseId": "123456789",
      "role": "STUDENT"
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_invitation — Get an invitation

Returns a specific invitation.

Inputs:

- `id` (string, required) — Identifier of the invitation

Output:

{
  "id": "888999111",
  "userId": "555222",
  "courseId": "123456789",
  "role": "STUDENT"
}
delete_invitation — Delete an invitation

Deletes a pending invitation.

Inputs:

- `id` (string, required) — Identifier of the invitation to delete

Output:

{}
accept_invitation — Accept an invitation

Accepts an invitation, adding the invited user to the course as a student or teacher and removing the invitation.

Inputs:

- `id` (string, required) — Identifier of the invitation to accept

Output:

{}

Registrations

create_registration — Create a push notification registration

Registers a Cloud Pub/Sub feed to receive Classroom push notifications.

Inputs:

- `body` (string, required) — JSON string representing the Registration object (feed, cloudPubsubTopic)

Output:

{
  "registrationId": "999111222",
  "feed": {
    "feedType": "COURSE_ROSTER_CHANGES",
    "courseRosterChangesInfo": { "courseId": "123456789" }
  },
  "cloudPubsubTopic": {
    "topicName": "projects/my-project/topics/classroom-notifications"
  },
  "expiryTime": "2025-02-15T10:00:00.000Z"
}
delete_registration — Delete a registration

Deletes a push notification registration.

Inputs:

- `registration_id` (string, required) — Identifier of the registration to delete

Output:

{}

User Profiles

get_user_profile — Get a user profile

Returns the profile of a user in the context of the authenticated user's courses.

Inputs:

- `user_id` (string, required) — Identifier of the user (or `me` for the authenticated user)

Output:

{
  "id": "987654321",
  "name": {
    "givenName": "John",
    "familyName": "Doe",
    "fullName": "John Doe"
  },
  "emailAddress": "[email protected]",
  "photoUrl": "https://lh3.googleusercontent.com/a/photo"
}

Guardians

create_guardian_invitation — Invite a guardian

Sends an email invitation to a guardian asking them to confirm their relationship to a student.

Inputs:

- `student_id` (string, required) — Identifier of the student
- `body`       (string, required) — JSON string with the guardian's email address

Output:

{
  "studentId": "555111",
  "invitationId": "aaa111bbb",
  "invitedEmailAddress": "[email protected]",
  "state": "PENDING",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
get_guardian_invitation — Get a guardian invitation

Returns a specific guardian invitation.

Inputs:

- `student_id`     (string, required) — Identifier of the student
- `invitation_id`  (string, required) — Identifier of the guardian invitation

Output:

{
  "studentId": "555111",
  "invitationId": "aaa111bbb",
  "invitedEmailAddress": "[email protected]",
  "state": "PENDING",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
patch_guardian_invitation — Update a guardian invitation

Updates a guardian invitation (e.g. cancel it by setting state to COMPLETE).

Inputs:

- `student_id`     (string, required) — Identifier of the student
- `invitation_id`  (string, required) — Identifier of the guardian invitation
- `update_mask`    (string, required) — Fields to update (e.g. state)
- `body`           (string, required) — JSON string with updated fields

Output:

{
  "studentId": "555111",
  "invitationId": "aaa111bbb",
  "invitedEmailAddress": "[email protected]",
  "state": "COMPLETE",
  "creationTime": "2025-01-15T10:00:00.000Z"
}
list_guardians — List guardians

Returns all confirmed guardians for a student.

Inputs:

- `student_id`             (string, required)  — Identifier of the student
- `invited_email_address`  (string, optional)  — Filter by guardian email address
- `page_size`              (integer, optional) — Maximum number of results
- `page_token`             (string, optional)  — Token for the next page

Output:

{
  "guardians": [
    {
      "studentId": "555111",
      "guardianId": "bbb222ccc",
      "invitedEmailAddress": "[email protected]",
      "guardianProfile": {
        "id": "bbb222ccc",
        "name": { "fullName": "Jane Parent" },
        "emailAddress": "[email protected]"
      }
    }
  ],
  "nextPageToken": "token_for_next_page"
}
get_guardian — Get a guardian

Returns a specific confirmed guardian for a student.

Inputs:

- `student_id`   (string, required) — Identifier of the student
- `guardian_id`  (string, required) — Identifier of the guardian

Output:

{
  "studentId": "555111",
  "guardianId": "bbb222ccc",
  "invitedEmailAddress": "[email protected]",
  "guardianProfile": {
    "id": "bbb222ccc",
    "name": { "givenName": "Jane", "familyName": "Parent", "fullName": "Jane Parent" },
    "emailAddress": "[email protected]"
  }
}
delete_guardian — Remove a guardian

Removes a guardian from a student, revoking their access to student progress emails.

Inputs:

- `student_id`   (string, required) — Identifier of the student
- `guardian_id`  (string, required) — Identifier of the guardian to remove

Output:

{}

API Parameters Reference

Common Parameters
  • page_size — Maximum number of items to return in a single response. The server may return fewer.
  • page_token — Token from a previous response's nextPageToken field. Pass it to retrieve the next page of results.
  • update_mask — Comma-separated list of field paths to update in a PATCH call. Only the listed fields are changed; omitted fields are left as-is.
Resource Identifiers

Course ID:

Numeric string assigned by Classroom, or an alias prefixed with "d:"
Example: 123456789  or  d:intro-python-2025

User ID:

Numeric Google user ID, email address, or the literal "me" for the authenticated user
Example: 987654321  or  [email protected]  or  me

Coursework ID:

Numeric string assigned by Classroom.
Use "-" as a wildcard to list submissions across all coursework in list_student_submissions.
Example: 222333444

Troubleshooting

Missing or Invalid Headers
  • Cause: OAuth token not provided in request headers or incorrect format
  • Solution:
    1. Verify Authorization: Bearer YOUR_TOKEN and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are present
    2. Check that your Google credential is active in your MewCP account
Insufficient Credits
  • Cause: API calls have exceeded your request limits
  • Solution:
    1. Check credit usage in your Curious Layer dashboard
    2. Upgrade to a paid plan or add credits for higher limits
    3. Contact support for credit adjustments
Credential Not Connected
  • Cause: No Google Classroom credential linked to your account
  • Solution:
    1. Go to Credentials in your MewCP dashboard
    2. Connect your Google account via OAuth
    3. Retry the request with the correct X-Mewcp-Credential-Id header
Malformed Request Payload
  • Cause: JSON payload passed to a body parameter is invalid or missing required fields
  • Solution:
    1. Validate JSON syntax before sending
    2. Ensure all required fields for the resource type are included
    3. Check parameter types match the Google Classroom API schema
Server Not Found
  • Cause: Incorrect server name in the API endpoint
  • Solution:
    1. Verify endpoint format: {server-name}/mcp/{tool-name}
    2. Use correct server name from documentation
    3. Check available servers in your Curious Layer account
Google Classroom API Error
  • Cause: Upstream Google Classroom API returned an error (e.g. 403 Forbidden, 404 Not Found)
  • Solution:
    1. Check the Google Workspace Status Dashboard for outages
    2. Verify your Google account has the required role (teacher/admin) for the operation
    3. Ensure the requested course or resource exists and you have access to it

Resources