MewCP Google Classroom MCP
About
Hosted, Stateless & Multitenant Google Classroom MCP server enables AI assistants to manage courses, assignments, coursework, students, and classroom activities through Google Classroom.
Details
- Author
- asthetech
- Categories
- Developer Tools
Jump to
Setup
Install MewCP Google Classroom MCP in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/asthetech/mewcp-google-classroom
Follow the installation instructions in the repository README, then restart your MCP client.
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.
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
- 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
Returns a list of courses the requesting user is permitted to view, optionally filtered by student, teacher, or course state.
- 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
{ "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" }
- id (string, required) — Identifier of the course
{ "id": "123456789", "name": "Introduction to Python", "section": "Period 1", "ownerId": "987654321", "courseState": "ACTIVE", "enrollmentCode": "abc123", "updateTime": "2025-01-15T10:00:00.000Z" }
Creates a new course. The requesting user becomes the owner.
- body (string, required) — JSON string representing the Course object to create
{ "id": "123456789", "name": "Introduction to Python", "section": "Period 1", "ownerId": "987654321", "courseState": "PROVISIONED", "enrollmentCode": "abc123", "updateTime": "2025-01-15T10:00:00.000Z" }
Replaces all fields of a course with the provided values.
- id (string, required) — Identifier of the course to update - body (string, required) — JSON string representing the updated Course object
{ "id": "123456789", "name": "Advanced Python", "section": "Period 2", "ownerId": "987654321", "courseState": "ACTIVE", "updateTime": "2025-01-16T09:00:00.000Z" }
Updates only the fields specified inupdate_mask.
- 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
{ "id": "123456789", "name": "Advanced Python", "section": "Period 1", "ownerId": "987654321", "courseState": "ACTIVE", "updateTime": "2025-01-16T09:00:00.000Z" }
Permanently deletes a course. Only course owners may delete a course.
- id (string, required) — Identifier of the course to delete
Creates an alias for a course so it can be referenced by an alternative identifier.
- course_id (string, required) — Identifier of the course - body (string, required) — JSON string representing the CourseAlias object
{ "alias": "d:intro-python-2025" }
- 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
{ "aliases": [ { "alias": "d:intro-python-2025" }, { "alias": "d:py101" } ] }
- course_id (string, required) — Identifier of the course - alias (string, required) — The alias to delete
- course_id (string, required) — Identifier of the course - body (string, required) — JSON string representing the Announcement object
{ "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" }
Returns announcements in a course, optionally filtered by state.
- 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
{ "announcements": [ { "id": "111222333", "courseId": "123456789", "text": "Welcome to the course!", "state": "PUBLISHED", "updateTime": "2025-01-15T10:00:00.000Z" } ], "nextPageToken": "token_for_next_page" }
- course_id (string, required) — Identifier of the course - id (string, required) — Identifier of the announcement
{ "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" }
Updates only the fields specified inupdate_mask.
- 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
{ "id": "111222333", "courseId": "123456789", "text": "Updated announcement text.", "state": "PUBLISHED", "updateTime": "2025-01-16T09:00:00.000Z" }
Deletes an announcement. Only draft announcements may be deleted; published announcements must be archived first.
- course_id (string, required) — Identifier of the course - id (string, required) — Identifier of the announcement
Changes which students an announcement is assigned to.
- 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
{ "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" }
Creates an assignment, short-answer question, or multiple-choice question in a course.
- course_id (string, required) — Identifier of the course - body (string, required) — JSON string representing the CourseWork object
{ "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" }
Returns coursework items in a course, optionally filtered by state.
- 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
{ "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" }
- course_id (string, required) — Identifier of the course - id (string, required) — Identifier of the coursework item
{ "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" }
Updates only the fields specified inupdate_mask.
- 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
{ "id": "222333444", "courseId": "123456789", "title": "Assignment 1: Hello World (Updated)", "workType": "ASSIGNMENT", "state": "PUBLISHED", "maxPoints": 50, "updateTime": "2025-01-16T09:00:00.000Z" }
- course_id (string, required) — Identifier of the course - id (string, required) — Identifier of the coursework item
Changes which students a coursework item is assigned to.
- 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
{ "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" }
Returns submissions for a coursework item, optionally filtered by user or state.
- 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
{ "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" }
- 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
{ "id": "333444555", "courseId": "123456789", "courseWorkId": "222333444", "userId": "555111", "state": "TURNED_IN", "assignedGrade": 95, "late": false, "updateTime": "2025-01-31T22:00:00.000Z" }
Updates fields on a submission, such as the assigned grade. Only certain fields may be updated by students or teachers.
- 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
{ "id": "333444555", "courseId": "123456789", "courseWorkId": "222333444", "userId": "555111", "state": "RETURNED", "assignedGrade": 95, "draftGrade": 95, "updateTime": "2025-02-02T09:00:00.000Z" }
Returns a turned-in submission to the student. The submission state changes to RETURNED.
- 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
Allows a student to reclaim a turned-in submission for further editing. The submission state changes back to NEW.
- 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
Creates a material resource (document, video, link, etc.) in a course.
- course_id (string, required) — Identifier of the course - body (string, required) — JSON string representing the CourseWorkMaterial object
{ "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" }
Returns materials in a course, optionally filtered by Drive item or URL.
- 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
{ "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" }
- course_id (string, required) — Identifier of the course - id (string, required) — Identifier of the material
{ "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" }
Updates only the fields specified inupdate_mask.
- 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
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





