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_courseworkclassroom_create_assignmentclassroom_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.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.me
- 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
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
Notes
- If the user exists outside your Workspace domain, Google may return 403/404.
- If you need archived courses too, ask with
course_state="ARCHIVED". acting_user_emaillets you impersonate a teacher/admin for operations that require role-specific permissions.classroom_create_announcementdoes not support real Classroom topic binding; iftopic_idis sent, it is appended as text marker.classroom_create_coursedefaults toPROVISIONEDfor safer setup before going live.classroom_create_coursedefaultsownerIdtoacting_user_email(orGOOGLE_WORKSPACE_ADMIN_EMAIL) when not provided.classroom_delete_coursepermanently deletes the course; preferclassroom_archive_coursewhen in doubt.