**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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
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:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
### 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:**
```json
{
"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 page
```
**Output:**
```json
{
"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 student
```
**Output:**
```json
{
"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 remove
```
**Output:**
```json
{}
```
### 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:**
```json
{
"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 page
```
**Output:**
```json
{
"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 teacher
```
**Output:**
```json
{
"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 remove
```
**Output:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{
"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:**
```json
{
"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:**
```json
{}
```
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:**
```json
{}
```
### 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:**
```json
{
"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:**
```json
{}
```
### 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:**
```json
{
"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 address
```
**Output:**
```json
{
"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 invitation
```
**Output:**
```json
{
"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 fields
```
**Output:**
```json
{
"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 page
```
**Output:**
```json
{
"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 guardian
```
**Output:**
```json
{
"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 remove
```
**Output:**
```json
{}
```
## 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 student@school.edu 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
- **[Google Classroom API Documentation](https://developers.google.com/classroom/guides/get-started)** — Official getting started guide
- **[Google Classroom API Reference](https://developers.google.com/classroom/reference/rest)** — Complete endpoint reference
- **[FastMCP Docs](https://gofastmcp.com/v2/getting-started/welcome)** — FastMCP specification
- **[FastMCP Credentials](https://pypi.org/project/fastmcp-credentials/)** — Credential handling package