Comprehensive read and write access to Google Classroom management
Google Classroom MCP (local)
This MCP server exposes multiple tools for read + write:
classroom_get_user_enrollmentsclassroom_get_courseclassroom_list_coursesclassroom_create_courseclassroom_update_courseclassroom_set_course_stateclassroom_archive_courseclassroom_activate_courseclassroom_delete_courseclassroom_list_course_studentsclassroom_list_course_teachersclassroom_add_teacher_to_courseclassroom_remove_teacher_from_courseclassroom_add_student_to_courseclassroom_remove_student_from_courseclassroom_list_invitationsclassroom_get_invitationclassroom_create_invitationclassroom_delete_invitationclassroom_accept_invitationclassroom_list_course_topicsclassroom_create_topicclassroom_create_announcementclassroom_list_coursework_materialsclassroom_create_coursework_materialclassroom_list_courseworkclassroom_create_assignmentclassroom_clone_courseclassroom_list_student_submissionsclassroom_set_draft_gradeclassroom_set_assigned_gradeclassroom_turn_in_submissionclassroom_reclaim_submissionclassroom_return_submission
1) Google Workspace setup
- Create (or choose) a Google Cloud project.
- Enable Google Classroom API.
- Create a Service Account and download its JSON key.
- Enable Domain-wide delegation on that service account.
- In Google Admin Console, go to
Security > API controls > Domain-wide delegationand add:- Client ID: service account client ID
- OAuth scopes (comma-separated):
https://www.googleapis.com/auth/classroom.courses.readonlyhttps://www.googleapis.com/auth/classroom.courseshttps://www.googleapis.com/auth/classroom.rosters.readonlyhttps://www.googleapis.com/auth/classroom.rostershttps://www.googleapis.com/auth/classroom.profile.emailshttps://www.googleapis.com/auth/classroom.topics.readonlyhttps://www.googleapis.com/auth/classroom.topicshttps://www.googleapis.com/auth/classroom.announcementshttps://www.googleapis.com/auth/classroom.coursework.students.readonlyhttps://www.googleapis.com/auth/classroom.coursework.studentshttps://www.googleapis.com/auth/classroom.coursework.mehttps://www.googleapis.com/auth/classroom.courseworkmaterials.readonlyhttps://www.googleapis.com/auth/classroom.courseworkmaterials
- Ensure the delegated admin user can read Classroom data in your domain.
2) Local install
cd /home/carlos/classroom-mcp
bash setup.sh
cp .env.example .env
# edit .env
Optional policy in .env:
CLASSROOM_REQUIRED_TEACHERS=osvalin15@certificacionmontessori.com,online@asociacionmontessori.mx
CLASSROOM_OBSOLETE_TEACHERS=presidencia@asociacionmontessori.mx
When set, these teachers are auto-added for:
classroom_create_courseclassroom_clone_course
Obsolete filter behavior:
classroom_list_coursesandclassroom_get_user_enrollmentsexclude courses that include any teacher fromCLASSROOM_OBSOLETE_TEACHERS.- If
CLASSROOM_OBSOLETE_TEACHERSis not set, default exclusion ispresidencia@asociacionmontessori.mx. - Set
CLASSROOM_OBSOLETE_TEACHERS=(empty) to disable this filter.
3) Register in Codex
codex mcp add classroom -- /home/carlos/classroom-mcp/run.sh
codex mcp list
4) Example prompt in Codex
En qué materias está registrado el usuario guiarodrigo@asociacionmontessori.mx?
5) Smoke test (portable)
Run the full write-path smoke test with automatic cleanup:
cd /home/carlos/classroom-mcp
./smoke_test.sh
You can override inputs with flags:
./smoke_test.sh \
--teacher-email carlos@certificacionmontessori.com \
--student-email carlos@asociacionmontessori.com.mx \
--course-id 765463029199
Or set defaults in .env:
SMOKE_TEST_TEACHER_EMAILSMOKE_TEST_STUDENT_EMAILSMOKE_TEST_COURSE_ID
Keep generated artifacts (no cleanup) only when debugging:
./smoke_test.sh --keep-artifacts
6) Admin smoke test (course lifecycle + invitations)
This covers the newer admin tools:
- create/update/archive/activate/delete course
- add/remove teacher
- create/get/list/accept/delete invitation
cd /home/carlos/classroom-mcp
./admin_smoke_test.sh
With explicit inputs:
./admin_smoke_test.sh \
--admin-email admin@asociacionmontessori.com.mx \
--teacher-email carlos@certificacionmontessori.com \
--student-email carlos@asociacionmontessori.com.mx
Defaults can live in .env:
ADMIN_SMOKE_ADMIN_EMAILADMIN_SMOKE_TEACHER_EMAILADMIN_SMOKE_STUDENT_EMAIL
7) Clone course example (MCP)
Use the new tool to clone structure + content safely as drafts:
classroom_clone_course(
source_course_id="844288618274",
new_course_name="Copia de F12 - Lenguaje",
teacher_emails=["carlos@certificacionmontessori.com"],
stu
Tools (5)
classroom_list_coursesList all courses available in the classroom environment.classroom_create_courseCreate a new course in Google Classroom.classroom_clone_courseClone an existing course structure and content as drafts.classroom_list_student_submissionsList submissions for a specific course and coursework.classroom_set_assigned_gradeSet the grade for a student submission.Environment Variables
CLASSROOM_REQUIRED_TEACHERSList of teacher emails to auto-add to new courses.CLASSROOM_OBSOLETE_TEACHERSList of teacher emails to exclude from course listings.SMOKE_TEST_TEACHER_EMAILDefault teacher email for smoke tests.Configuration
{"mcpServers": {"classroom": {"command": "/path/to/run.sh"}}}