MewCP Google Classroom MCP

by asthetech

Not rated
GitHub

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

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
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.