Skip to main content
Glama

Google Classroom Model Context Protocol (MCP) Server

Ecosystem License: MIT Runtime

A native, lightweight, and robust Model Context Protocol (MCP) server for the Google Classroom API. It connects LLM reasoning engines (Antigravity, Claude Desktop, and autonomous fleet agents) directly to Google Classroom streams, assignments, submissions, rosters, and educational resources.


πŸ— Architecture & Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Antigravity / Claude Desktop (MCP Client)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ JSON-RPC (Stdio)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               google-classroom-mcp                      β”‚
β”‚  - index.mjs            (MCP Protocol Dispatcher)       β”‚
β”‚  - auth.mjs             (OAuth 2.0 Loopback Receiver)   β”‚
β”‚  - sync-schemas.mjs     (Lazy Tool Schema Generator)    β”‚
β”‚  - sync.ps1             (Ecosystem Sync & Secret Guard) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ HTTPS REST with Auto Token Refresh
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Google Classroom REST API (v1)                      β”‚
β”‚     https://classroom.googleapis.com/v1/...             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related MCP server: ClassroomScribe

πŸ›  Available Tools & Implementation Methods

The server implements 12 high-agency tools conforming to @modelcontextprotocol/sdk:

1. list_courses

  • Method: GET https://classroom.googleapis.com/v1/courses

  • Parameters:

    • courseStates (array of strings, optional): Filter by status (ACTIVE, ARCHIVED, PROVISIONED, DECLINED, SUSPENDED). Defaults to ['ACTIVE'].

    • pageSize (number, optional): Maximum items to return (default 20).

    • studentId (string, optional): Filter courses enrolled as student ("me" or user ID).

    • teacherId (string, optional): Filter courses instructed as teacher ("me" or user ID).

  • Returns: Markdown list of matching courses with ID, name, section, room, enrollment code, and web link.

2. get_course

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}

  • Parameters:

    • courseId (string, required): Unique Google Classroom course identifier.

  • Returns: Full course object schema including enrollment code, description, teacher group email, and calendar ID.

3. list_coursework

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/courseWork

  • Parameters:

    • courseId (string, required): Target course identifier.

    • courseWorkStates (array of strings, optional): Filter (PUBLISHED, DRAFT, DELETED).

    • pageSize (number, optional): Maximum assignments to fetch (default 30).

    • orderBy (string, optional): Order criteria (dueDate desc, updateTime desc).

  • Returns: Formatted summary of assignments, problem sets, due dates/times, max points, and links.

4. get_coursework

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/courseWork/{courseWorkId}

  • Parameters:

    • courseId (string, required): Course identifier.

    • courseWorkId (string, required): Coursework item identifier.

  • Returns: Complete assignment metadata, instructions, rubrics, and attached materials (Google Drive files, YouTube videos, links).

5. list_submissions

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions

  • Parameters:

    • courseId (string, required): Course identifier.

    • courseWorkId (string, required): Coursework item ID (or "-" for all coursework).

    • userId (string, optional): Target student filter ("me" for current authenticated student).

    • states (array of strings, optional): Filter (NEW, CREATED, TURNED_IN, RETURNED, RECLAIMED_BY_STUDENT).

  • Returns: Student submission states, lateness flags, assigned grades, draft grades, and turn-in links.

6. get_submission

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{submissionId}

  • Parameters:

    • courseId (string, required)

    • courseWorkId (string, required)

    • submissionId (string, required)

  • Returns: Detailed submission record with attached student drive files, links, and grade history.

7. list_announcements

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/announcements

  • Parameters:

    • courseId (string, required): Course identifier.

    • announcementStates (array of strings, optional): Filter (PUBLISHED, DRAFT, DELETED).

    • pageSize (number, optional): Max announcements (default 20).

  • Returns: Course stream announcements, updates, creator info, timestamps, and attached assets.

8. list_coursework_materials

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/courseWorkMaterials

  • Parameters:

    • courseId (string, required): Course identifier.

    • courseWorkMaterialStates (array of strings, optional): Defaults to ['PUBLISHED'].

  • Returns: Standalone class resources, lecture slide decks, syllabus documents, and shared materials.

9. list_teachers

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/teachers

  • Parameters:

    • courseId (string, required)

  • Returns: List of instructors with display name, email, and user IDs.

10. list_students

  • Method: GET https://classroom.googleapis.com/v1/courses/{courseId}/students

  • Parameters:

    • courseId (string, required)

  • Returns: List of enrolled classmates with display name, email, and user IDs.

11. turn_in_assignment

  • Method: POST https://classroom.googleapis.com/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{submissionId}:turnIn

  • Parameters:

    • courseId (string, required)

    • courseWorkId (string, required)

    • submissionId (string, required)

  • Returns: Confirmation that the student submission has been formally marked as turned in for grading.

12. reclaim_assignment

  • Method: POST https://classroom.googleapis.com/v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{submissionId}:reclaim

  • Parameters:

    • courseId (string, required)

    • courseWorkId (string, required)

    • submissionId (string, required)

  • Returns: Confirmation that the student submission has been unsubmitted/reclaimed for editing.


πŸ”‘ Authentication & Token Lifecycle

  1. Credentials: Provide standard Google Cloud OAuth 2.0 Client credentials (Desktop Application).

  2. Initial Authorisation (npm run auth):

    • Launches a local HTTP loopback server on port 58246.

    • Generates Google OAuth consent URL with offline access (prompt=consent).

    • Opens the browser to authorize.

    • Captures authorization code and exchanges it for a permanent refresh_token and initial access_token.

    • Persists securely to .classroom-server-credentials.json (gitignored).

  3. Automated Refreshing:

    • index.mjs checks token expiration before every API request.

    • When remaining validity is < 60 seconds, or on receiving HTTP 401 Unauthorized, it transparently calls https://oauth2.googleapis.com/token to refresh the access token.


πŸš€ Installation & Setup

# 1. Clone repository
git clone https://github.com/Aaradhya-Dev-Tamrakar/google-classroom-mcp.git
cd google-classroom-mcp

# 2. Install dependencies
npm install

# 3. Authenticate with Google Classroom
npm run auth

# 4. Generate Antigravity tool schemas
npm run sync

βš™οΈ Configuration

Antigravity & Claude Desktop Registration

Add this server block to your mcp_config.json:

{
  "mcpServers": {
    "classroom": {
      "command": "node",
      "args": [
        "F:\\Aaradhya-Dev-Tamrakar\\google-classroom-mcp\\index.mjs"
      ],
      "env": {
        "CLASSROOM_CREDENTIALS_PATH": "C:\\Users\\Aaradhya\\.classroom-server-credentials.json",
        "CLASSROOM_OAUTH_PATH": "C:\\Users\\Aaradhya\\.classroom-credentials.json"
      }
    }
  }
}

πŸ”„ Synchronization & Maintenance (sync.ps1)

This repository follows the centralized ecosystem Git and secret governance standard:

# Routine synchronization & rebase push:
.\sync.ps1

# Custom semantic commit message:
.\sync.ps1 -m "feat(classroom): add rubric parsing support"

# Refresh Antigravity schemas before pushing:
.\sync.ps1 -SyncSchemas

# Dry-run inspection (runs secret scanner without touching git state):
.\sync.ps1 -WhatIf

# Safe pull only:
.\sync.ps1 -PullOnly

Safety Features

  • Secret Scanner Guard: Blocks commits if OAuth credentials, tokens, private keys, or API secrets are staged.

  • Atomic conventional commit formatting: Autodetects added/modified files and formats clean commit prefixes.

  • Rebase-safety: Always executes git pull --rebase --autostash before pushing to avoid merge bubbles.


πŸ“„ License

MIT License. Developed for Aaradhya's Personal Tool Ecosystem.

Available Tools

12 tools
get_courseA

Get detailed information about a specific course by Course ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Get detailed information', which implies a read-only operation but does not explicitly state that, nor does it mention any permissions, rate limits, or side effects. For a tool with no annotations, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. It front-loads the action and resource, and the 'by Course ID' clarifies the key parameter. Every word contributes to the meaning, so it is optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool with one parameter and no output schema, the description is adequate but minimal. It does not disclose what 'detailed information' includes, whether it returns the same fields as list_courses, or any potential restrictions. Given the lack of annotations, the description could be more complete, but the core action and required input are clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single parameter 'courseId', so the schema already explains its meaning. The description adds 'detailed information' but does not elaborate on the parameter format or any constraints beyond what the schema states. The baseline of 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get'), a resource ('detailed information about a specific course'), and the distinguishing key ('by Course ID'). It differentiates from sibling tools like list_courses and get_coursework by specifying the resource and the ID-based lookup, so an agent can identify it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a course ID and need detailed info, but it does not explicitly mention when to prefer it over siblings or when not to use it. For example, it doesn't state that list_courses should be used when you don't have an ID. The guidance is implied but not explicit, so it's adequate but not strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_courseworkA

Get detailed information for a specific assignment, including description, attached Drive files, YouTube links, and rubrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.
courseWorkIdYesThe unique identifier of the coursework.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses what the tool returns ('detailed information... including description, attached Drive files, YouTube links, and rubrics'), which is useful transparency. The word 'Get' strongly implies a read-only operation, though it does not explicitly state 'no side effects' or mention permission needs. This is adequate for a simple get tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler. The core purpose is stated first, followed by concrete examples of what is included. Every clause adds value, and it is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter get tool with no output schema and no annotations, the description is complete enough: it tells the agent what the tool returns and implies the parameters are prerequisite identifiers. It does not mention error conditions or that courseWorkId might come from list_coursework, but these are minor given the tool's simplicity and the schema's clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters already described ('unique identifier of the course/coursework'). The description's 'specific assignment' maps to courseWorkId but adds no format, source, or additional meaning beyond the schema. Baseline 3 is appropriate since the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get detailed information') on a specific resource ('a specific assignment'), and enumerates concrete return contents (description, Drive files, YouTube links, rubrics). This distinguishes it from siblings like list_coursework (which lists many) and get_submission (which targets submissions, not assignments), so an agent can immediately tell what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a specific assignment' clearly implies the tool is used when you already have a courseWorkId and need details for one item, setting clear context. However, it does not explicitly name alternatives or exclusions (e.g., 'use list_coursework to find IDs' or 'not for submissions'), so it falls just short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_submissionA

Get detailed student submission info including attached files, links, and assigned grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.
courseWorkIdYesThe coursework identifier.
submissionIdYesThe submission ID.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. The verb 'Get' communicates a read-only operation, and the listed output content adds context, but the description does not mention error behavior, permissions, side-effect freedom, or response shape details. It is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence: the action and object come first, and the trailing clause adds useful specifics without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-ID retrieval tool, the description is nearly complete: it names the resource and key output facets, and the schema covers all required inputs. It does not provide a full return structure, but with no output schema and this complexity level, the coverage is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already conveys; the relationship between courseId, courseWorkId, and submissionId is left to the generic schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and resource ('detailed student submission info') and concretely lists what is included: attached files, links, and assigned grade. This clearly distinguishes it from list_submissions and the write-oriented sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the singular 'submission' and the three required identifiers, but the description does not explicitly say when to prefer this over list_submissions or provide any when-not/exclusion guidance. An agent must infer the boundary from the tool name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_announcementsB

List stream announcements, notices, and updates for a course.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderByNoSort order, e.g. 'updateTime desc'.
courseIdYesThe unique identifier of the course.
pageSizeNoMaximum number of announcements to return (default 20).
announcementStatesNoFilter states: PUBLISHED, DRAFT, DELETED. Defaults to ['PUBLISHED'].

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'List' implies a read-only, non-destructive operation, and expanding the resource to 'notices, and updates' adds a little behavioral context. However, it does not mention authentication needs, pagination behavior, default state filtering, or what the response contains, so transparency is only partially addressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action, resource, and scope with no filler. Every word earns its place, and the inclusion of 'notices, and updates' adds clarity without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter list tool with no annotations and no output schema, the description plus schema covers the basics needed for a correct call: what the tool returns in general and that courseId is required. It omits return-value shape and sibling selection guidance, but the tool is straightforward enough that these gaps are not critical. A midpoint score reflects the adequate but unremarkable completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all four parameters individually documented. The description adds no parameter-level detail beyond the existing schema and only broadly signals course scoping via 'for a course'. A baseline 3 is appropriate because the schema carries the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource as 'stream announcements, notices, and updates' for a course, which is clear and distinct from most siblings. However, it does not explicitly differentiate from related list tools such as list_coursework_materials or list_coursework, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It only states that it lists announcements for a course, leaving the choice of tool entirely to inference. No prerequisites, exclusions, or sibling tool comparisons are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_coursesA

List courses where the user is a student or teacher (e.g. active or archived classes).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoMaximum number of courses to return (default 20).
studentIdNoFilter courses enrolled as student (e.g. 'me').
teacherIdNoFilter courses taught as teacher (e.g. 'me').
courseStatesNoFilter by states: ACTIVE, ARCHIVED, PROVISIONED, DECLINED, SUSPENDED. Defaults to ['ACTIVE'].

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It only states the scope (courses where the user is a student or teacher), implying read-only behavior, but does not mention return format, pagination, side effects, or authentication requirements. The description is minimal and leaves many behavioral aspects unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words. The action is front-loaded and the scope is clear. It is appropriately sized for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 optional parameters and no output schema, the description is adequate but minimal. It explains the tool's purpose and scope but does not specify what the response looks like (e.g., array of Course objects) or any default behavior (like default page size). The agent may need to infer return structure, which is a gap for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond the schema, such as defaults or relationships. It does not compensate for the schema's completeness, but the schema already documents each parameter well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List courses where the user is a student or teacher'. It clearly distinguishes this from sibling tools like get_course (singular) and list_coursework (different resource) by its focus on courses and the user's role. The examples 'active or archived' add context without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need a list of courses for the current user, use this tool. However, it does not explicitly contrast it with alternatives like get_course or explain when not to use it. The phrase 'e.g. active or archived' hints at filtering but gives no exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_courseworkC

List assignments, quizzes, and coursework for a specific course.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderByNoSort order, e.g., 'dueDate desc' or 'updateTime desc'.
courseIdYesThe unique identifier of the course.
pageSizeNoMaximum number of assignments to return (default 30).
courseWorkStatesNoFilter by states: PUBLISHED, DRAFT, DELETED. Defaults to ['PUBLISHED'].

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'List' and provides no information about default state filtering, pagination, return format, or that only PUBLISHED coursework is returned by default, which is behavior an agent would need to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with the verb and resource front-loaded. It earns its place without wasted words, though it is somewhat terse and could have included a bit more context without harming readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a straightforward list tool: it names the resource, scopes it to a course, and the schema covers parameters and defaults. However, with no output schema and no annotation, the agent gets little context about pagination limits or default filtering, leaving minor gaps for a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes all four parameters thoroughly (100% coverage), so the description does not need to add parameter-level detail. The description's phrase 'assignments, quizzes, and coursework' loosely aligns with the courseWorkStates and orderBy parameters but does not add meaning beyond the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies the resource ('assignments, quizzes, and coursework') for a specific course, making the tool's purpose clear. It differentiates from list_courses by scoping to a course, though it does not explicitly name sibling alternatives such as get_coursework or list_coursework_materials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like get_coursework or list_coursework_materials. The description only states what the tool does, leaving the agent to infer selection criteria from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_coursework_materialsA

List materials, syllabi, lecture slides, and resources posted under Classwork.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.
pageSizeNoMaximum number of materials to return (default 20).
courseWorkMaterialStatesNoFilter states: PUBLISHED, DRAFT, DELETED. Defaults to ['PUBLISHED'].

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full behavioral transparency. It states the core behavior (listing materials) but does not disclose important behavioral details such as the default state filter (PUBLISHED), pagination behavior, or that it only returns materials (not assignments). These are significant gaps for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the tool's function. It is front-loaded with the key action and resource, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no annotations, and no output schema, the description is minimally adequate but lacks guidance on when to use it versus similar tools and does not mention default behaviors or pagination. It is not incomplete enough to fail, but it leaves room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, documenting all three parameters (courseId, pageSize, courseWorkMaterialStates) with descriptions. The tool description adds no additional parameter meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with a clear resource 'materials, syllabi, lecture slides, and resources posted under Classwork'. This clearly distinguishes it from sibling tools like list_coursework (which lists assignments) and list_announcements. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving materials under Classwork, but it does not explicitly state when to use it versus list_coursework or other listing tools. There is no mention of exclusions or alternatives, leaving the agent to infer based on the resource type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_studentsB

List students enrolled in a course.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.
pageSizeNoMax students to return.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It only states the action, with no mention of pagination (despite a pageSize parameter), result format, ordering, or any side effects. This leaves the agent without key details about how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundant words. It is appropriately minimal and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema and no annotations, the description is thin. It omits pagination behavior (pageSize usage, defaults), result structure, and any preconditions (e.g., course existence). An agent would need to guess or inspect the schema for these details, which the schema does not fully clarify either.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds no extra meaning beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (list) and resource (students enrolled in a course). It is unambiguous and distinct from sibling tools like list_teachers or list_coursework, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need students of a course, but it does not explicitly mention alternatives or when not to use it. With several sibling list tools, a note distinguishing this from list_teachers would improve guidance, but the basic context is inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_submissionsB

List student submissions for a coursework (status: TURNED_IN, RETURNED, NEW, late status, assigned grade).

ParametersJSON Schema
NameRequiredDescriptionDefault
statesNoFilter by submission states: NEW, CREATED, TURNED_IN, RETURNED, RECLAIMED_BY_STUDENT.
userIdNoOptional student filter ('me' for current user, or student user ID).
courseIdYesThe unique identifier of the course.
pageSizeNoMaximum number of submissions to return.
courseWorkIdYesThe coursework identifier (or '-' for all coursework in the course).

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full behavioral burden. It conveys a read-only listing operation and indicates the kind of data returned, but it does not disclose pagination behavior, ordering, response limits, or whether any side effects occur. The verb 'List' implies read-only, which helps, but the description could be more explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: one sentence states the main operation, with a short parenthetical about returned information. It contains no filler, though the parenthetical could be structured more clearly by separating states from return fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should compensate by explaining return shape, pagination, and exclusions. It only partially mentions returned fields and gives no usage routing or behavioral details, so an agent is under-informed for a five-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, so the schema already documents all five parameters. The description adds little parameter-level meaning beyond the schema; the statuses mentioned in the description are already represented by the states parameter and the course/coursework IDs are already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'List student submissions for a coursework.' It also hints at returned data (statuses, late status, assigned grade) and is distinguishable from the sibling get_submission by the list-vs-single-operation semantics. The parenthetical is slightly imprecise because it mixes submission states with return fields, but the core purpose remains clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is provided, and no alternatives are mentioned. The description does not explain when to prefer this over get_submission or how it relates to turn_in_assignment/reclaim_assignement, leaving the agent to infer the intended use case from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teachersA

List teachers of a course.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe unique identifier of the course.
pageSizeNoMax teachers to return.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that the operation is a listing, but does not describe return format, pagination behavior, ordering, or error handling. This is a significant gap for a tool with no annotation safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff. It front-loads the verb and resource, and every word contributes meaning. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation, the description is adequate but has gaps. It does not specify the return structure, pagination semantics, or any edge-case behavior, which is especially relevant given the absence of both annotations and an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (courseId and pageSize) are already documented. The tool description adds no extra parameter context, which is acceptable given the high schema coverage, but it does not compensate for any implicit assumptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('teachers of a course'), clearly identifying the operation. It naturally distinguishes itself from siblings like list_students and list_courses, so an agent can understand what this tool does without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: call this tool when you need teachers for a specific course. However, there is no explicit guidance on when to prefer this tool over alternatives or any exclusions, so the usage context is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reclaim_assignmentB

Reclaim a turned-in student submission (unsubmit).

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe course ID.
courseWorkIdYesThe coursework ID.
submissionIdYesThe submission ID.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden of behavioral disclosure. It only states the action without explaining side effects, permission requirements, reversibility, or what happens if the submission is not in a turned-in state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly worded sentence with no filler. The verb and key qualifier are front-loaded, making the description immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with three String ID parameters and no output schema, the description provides the core action. However, it lacks behavioral safeguards such as prerequisites, failure states, or consequences, which are especially important given the lack of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter simply described as 'The X ID.' The description itself contributes no additional parameter-level detail, so the baseline score of 3 applies because the schema already documents all three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'reclaim' and clear resource 'turned-in student submission', with the parenthetical 'unsubmit' removing any ambiguity. This plainly contrasts with the sibling tool turn_in_assignment, which performs the opposite action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. Although the sibling list includes turn_in_assignment, the description does not mention conditions, prerequisites, or exclusions that would help an agent decide between them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

turn_in_assignmentC

Turn in a student submission for grading.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesThe course ID.
courseWorkIdYesThe coursework ID.
submissionIdYesThe submission ID.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral burden, but it only states the intent ('for grading') without disclosing that this is a state-changing action, whether it is irreversible, or what grading submission entails. Mutation effects are entirely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler. The verb and object are front-loaded, making it scan instantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is too terse. It omits post-submission behavior, confirmation of success, potential errors, or any sequencing/requirements, leaving agents to infer critical operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter has a basic description, so the schema carries the parameter meaning. The description adds no additional parameter-level detail but does not need to; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('turn in') and resource ('student submission') with the purpose 'for grading', which clearly identifies the action. It is distinguishable from siblings like reclaim_assignment even though no explicit differentiation is stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool vs. alternatives, such as preceding with list_submissions or that reclaim_assignment reverses the operation. No context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv1.0.0
    • First observedget_course
    • First observedget_coursework
    • First observedget_submission
    • First observedlist_announcements
    • First observedlist_courses
    • First observedlist_coursework
    • First observedlist_coursework_materials
    • First observedlist_students
    • First observedlist_submissions
    • First observedlist_teachers
    • First observedreclaim_assignment
    • First observedturn_in_assignment

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair: courses, coursework, submissions, announcements, materials, and people are cleanly separated. The get/list pairs are unambiguous, and turn_in/reclaim are the only write actions with clearly opposite purposes.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern, using get_ or list_ for reads and action verbs for state changes. Pluralization is predictable based on whether the resource is a collection or an individual item.

Tool Count5/5

12 tools is well within the ideal 3-15 range and each tool corresponds to a meaningful Google Classroom operation. The count feels appropriately scoped for a classroom-focused MCP without unnecessary bloat.

Completeness4/5

The server covers the main read workflows well: courses, coursework, submissions, announcements, materials, teachers, and students. It also supports the student-facing actions of turning in and reclaiming assignments, though it lacks create/update/delete operations for coursework or grading functionality.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    This MCP server provides comprehensive read and write access to Google Classroom, enabling management of courses, rosters, assignments, and grades. It supports full lifecycle operations for educational environments including student submissions, teacher invitations, and coursework organization.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables students to access Google Classroom through MCP, listing courses, upcoming assignments, tasks, grades, announcements, materials, topics, and teachers, with optional tools to submit or cancel submissions.
    -