
MewCP Google Classroom MCP
from AStheTECH
Hosted, Stateless & Multitenant Google Classroom MCP server enables AI assistants to manage courses, assignments, coursework, students, and classroom activities through Google Classroom.
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 resultsOutput:
{
"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 courseOutput:
{
"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 createOutput:
{
"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 objectOutput:
{
"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 updateOutput:
{
"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 deleteOutput:
{}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 objectOutput:
{
"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 resultsOutput:
{
"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 deleteOutput:
{}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 objectOutput:
{
"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 pageOutput:
{
"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 announcementOutput:
{
"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 fieldsOutput:
{
"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 announcementOutput:
{}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 IDsOutput:
{
"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 objectOutput:
{
"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 pageOutput:
{
"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 itemOutput:
{
"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 fieldsOutput:
{
"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 itemOutput:
{}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 IDsOutput:
{
"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 pageOutput:
{
"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 submissionOutput:
{
"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 fieldsOutput:
{
"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 submissionOutput:
{}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 submissionOutput:
{}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 objectOutput:
{
"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 pageOutput:
{
"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 materialOutput:
{
"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 fieldsOutput:
{
"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 deleteOutput:
{}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 objectOutput:
{
"courseId": "123456789",
"userId": "555111",
"profile": {
"id": "555111",
"name": { "fullName": "Jane Smith" },
"emailAddress": "jane.smith@school.edu"
}
}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 pageOutput:
{
"students": [
{
"courseId": "123456789",
"userId": "555111",
"profile": {
"id": "555111",
"name": { "fullName": "Jane Smith" },
"emailAddress": "jane.smith@school.edu"
}
}
],
"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 studentOutput:
{
"courseId": "123456789",
"userId": "555111",
"profile": {
"id": "555111",
"name": { "givenName": "Jane", "familyName": "Smith", "fullName": "Jane Smith" },
"emailAddress": "jane.smith@school.edu"
}
}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 removeOutput:
{}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 objectOutput:
{
"courseId": "123456789",
"userId": "666111",
"profile": {
"id": "666111",
"name": { "fullName": "Prof. Jones" },
"emailAddress": "jones@school.edu"
}
}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 pageOutput:
{
"teachers": [
{
"courseId": "123456789",
"userId": "666111",
"profile": {
"id": "666111",
"name": { "fullName": "Prof. Jones" },
"emailAddress": "jones@school.edu"
}
}
],
"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 teacherOutput:
{
"courseId": "123456789",
"userId": "666111",
"profile": {
"id": "666111",
"name": { "givenName": "Robert", "familyName": "Jones", "fullName": "Prof. Jones" },
"emailAddress": "jones@school.edu"
}
}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 removeOutput:
{}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 objectOutput:
{
"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 pageOutput:
{
"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 topicOutput:
{
"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 fieldsOutput:
{
"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 deleteOutput:
{}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 pageOutput:
{
"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 invitationOutput:
{
"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 deleteOutput:
{}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 acceptOutput:
{}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 deleteOutput:
{}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": "john.doe@school.edu",
"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 addressOutput:
{
"studentId": "555111",
"invitationId": "aaa111bbb",
"invitedEmailAddress": "parent@email.com",
"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 invitationOutput:
{
"studentId": "555111",
"invitationId": "aaa111bbb",
"invitedEmailAddress": "parent@email.com",
"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 fieldsOutput:
{
"studentId": "555111",
"invitationId": "aaa111bbb",
"invitedEmailAddress": "parent@email.com",
"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 pageOutput:
{
"guardians": [
{
"studentId": "555111",
"guardianId": "bbb222ccc",
"invitedEmailAddress": "parent@email.com",
"guardianProfile": {
"id": "bbb222ccc",
"name": { "fullName": "Jane Parent" },
"emailAddress": "parent@email.com"
}
}
],
"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 guardianOutput:
{
"studentId": "555111",
"guardianId": "bbb222ccc",
"invitedEmailAddress": "parent@email.com",
"guardianProfile": {
"id": "bbb222ccc",
"name": { "givenName": "Jane", "familyName": "Parent", "fullName": "Jane Parent" },
"emailAddress": "parent@email.com"
}
}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 removeOutput:
{}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'snextPageTokenfield. 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-2025User ID:
Numeric Google user ID, email address, or the literal "me" for the authenticated user
Example: 987654321 or student@school.edu or meCoursework ID:
Numeric string assigned by Classroom.
Use "-" as a wildcard to list submissions across all coursework in list_student_submissions.
Example: 222333444This tool doesn't publish a standard install command — the repository README on GitHub covers its setup.
Troubleshooting
Missing or Invalid Headers
- Cause: OAuth token not provided in request headers or incorrect format
- Solution:
- Verify
Authorization: Bearer YOUR_TOKENandX-Mewcp-Credential-Id: CREDENTIAL-IDheaders are present - Check that your Google credential is active in your MewCP account
- Verify
Insufficient Credits
- Cause: API calls have exceeded your request limits
- Solution:
- Check credit usage in your Curious Layer dashboard
- Upgrade to a paid plan or add credits for higher limits
- Contact support for credit adjustments
Credential Not Connected
- Cause: No Google Classroom credential linked to your account
- Solution:
- Go to Credentials in your MewCP dashboard
- Connect your Google account via OAuth
- Retry the request with the correct
X-Mewcp-Credential-Idheader
Malformed Request Payload
- Cause: JSON payload passed to a
bodyparameter is invalid or missing required fields - Solution:
- Validate JSON syntax before sending
- Ensure all required fields for the resource type are included
- Check parameter types match the Google Classroom API schema
Server Not Found
- Cause: Incorrect server name in the API endpoint
- Solution:
- Verify endpoint format:
{server-name}/mcp/{tool-name} - Use correct server name from documentation
- Check available servers in your Curious Layer account
- Verify endpoint format:
Google Classroom API Error
- Cause: Upstream Google Classroom API returned an error (e.g. 403 Forbidden, 404 Not Found)
- Solution:
- Check the Google Workspace Status Dashboard for outages
- Verify your Google account has the required role (teacher/admin) for the operation
- Ensure the requested course or resource exists and you have access to it
Resources
- Google Classroom API Documentation — Official getting started guide
- Google Classroom API Reference — Complete endpoint reference
- FastMCP Docs — FastMCP specification
- FastMCP Credentials — Credential handling package