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'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-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:
- 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