# Google Classroom MCP Server > **Google Classroom MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Google Classroom. > > MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows, > token refresh, and production-grade auto-scaling — so your AI agents can connect to > third-party services and run freely without you managing any MCP server yourself. > > To connect your agent to this server you need a MewCP account and two values: > - MEWCP_KEY — your personal API key (dashboard → Developer) > - CREDENTIAL_ID — the stored credential MewCP securely injects per request > > Server page: https://mewcp.com/mcp/google-classroom > MewCP docs: https://docs.mewcp.com > Full catalog: https://mewcp.com/llms.txt ## About Manage courses, assignments, rosters and student activity within Google Classroom. Create learning workflows, track submissions and organize educational content across classrooms. ## How to connect Server Page URL: https://mewcp.com/mcp/google-classroom Gateway URL: https://gateway.mewcp.com/google-classroom/mcp Every request to this server requires two headers: Authorization: Bearer — your MewCP API key (dashboard → Developer) x-mewcp-credential-id: — the stored credential ID for this service All connection snippets and ready-to-use code examples are available on the server page and in this document below. --- ## Server 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:** ```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
--- ## Connection snippets ### Python (fastmcp) ```python import asyncio from fastmcp import Client from fastmcp.client.transports import StreamableHttpTransport SERVER_URL = "https://gateway.mewcp.com/google-classroom/mcp" MEWCP_KEY = "YOUR_MEWCP_KEY" CREDENTIAL_ID = "YOUR_CREDENTIAL_ID" transport = StreamableHttpTransport( url=SERVER_URL, headers={ "Authorization": f"Bearer {MEWCP_KEY}", "x-mewcp-credential-id": CREDENTIAL_ID, } ) async def main(): client = Client(transport) async with client: await client.ping() tools = await client.list_tools() resources = await client.list_resources() prompts = await client.list_prompts() # Change the tool name and arguments with actual tool and arguments available in server result = await client.call_tool("example_tool", {"param": "value"}) print(result) asyncio.run(main()) ``` ### TypeScript (MCP SDK) ```typescript import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const SERVER_URL = "https://gateway.mewcp.com/google-classroom/mcp"; const MEWCP_KEY = "YOUR_MEWCP_KEY"; const CREDENTIAL_ID = "YOUR_CREDENTIAL_ID"; const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), { requestInit: { headers: { Authorization: `Bearer ${MEWCP_KEY}`, "x-mewcp-credential-id": CREDENTIAL_ID, }, }, }); const client = new Client({ name: "mewcp-client", version: "1.0.0", }); await client.connect(transport); const tools = await client.listTools(); console.log("Available tools:", tools.tools.map(t => t.name)); // Change the tool name and arguments to a tool available on your server const result = await client.callTool({ name: "example_tool", arguments: { param: "value" }, }); console.log("Tool result:", result); ``` ### VS Code (settings.json) ```json { "servers": { "mewcp-google-classroom": { "type": "http", "url": "https://gateway.mewcp.com/google-classroom/mcp", "headers": { "Authorization": "Bearer YOUR_MEWCP_KEY", "x-mewcp-credential-id": "YOUR_CREDENTIAL_ID" } } } } ``` ### Cursor (mcp.json) ```json { "mcpServers": { "google-classroom": { "url": "https://gateway.mewcp.com/google-classroom/mcp", "headers": { "Authorization": "Bearer YOUR_MEWCP_KEY", "x-mewcp-credential-id": "YOUR_CREDENTIAL_ID" } } } } ``` ### Claude Desktop (claude_desktop_config.json) ```json "mcpServers": { "google-classroom": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "https://gateway.mewcp.com/google-classroom/mcp", "--transport", "http-only", "--header", "Authorization: Bearer YOUR_MEWCP_KEY", "--header", "x-mewcp-credential-id: YOUR_CREDENTIAL_ID" ] } } ```