Skip to main content
Glama

google-classroom-mcp

Read-only Google Classroom access for DeepSeek — and any other MCP-capable agent.

This is a Model Context Protocol server that turns your Google Classroom account into tools an LLM can call: courses, coursework, due dates, announcements, rosters and student submissions.

DeepSeek's API does not speak MCP by itself, so point an MCP-capable harness at this server and select a DeepSeek model there. Works with DeepSeek Harness, opencode, Claude Desktop, Cursor, or the bundled example agent (examples/deepseek_agent.py) that calls the DeepSeek API directly.

Tools

Tool

Returns

list_courses

Courses you teach or attend (id, name, section, room, state, link)

get_course

One course with description and enrollment code

list_coursework

Assignments, quizzes, questions and materials, with due dates

list_due_soon

Upcoming coursework across all active courses, sorted by due date

list_announcements

Recent announcements in a course

list_teachers

Teacher roster (name, email)

list_students

Student roster (name, email)

list_submissions

Submission state and grades for one assignment

Every tool is read-only. The server cannot create, edit or delete anything in Classroom.

Related MCP server: Google Classroom MCP

Setup

1. Create a Google OAuth client

  1. Open the Google Cloud Console and create a project.

  2. APIs & Services → Library: enable the Google Classroom API.

  3. APIs & Services → OAuth consent screen: choose External, fill in the required fields, and add your own Google account under Test users. In Testing mode Google expires refresh tokens after 7 days. For a durable personal setup, click Publish app (no verification needed for personal use; you will see an "unverified app" warning during sign-in).

  4. APIs & Services → Credentials → Create credentials → OAuth client ID: application type Desktop app, then download the JSON.

  5. Save the file as ~/.google-classroom-mcp/client_secret.json (Windows: %USERPROFILE%\.google-classroom-mcp\client_secret.json), or set CLASSROOM_MCP_CLIENT_SECRET_FILE to its path.

2. Install

git clone https://github.com/praisethefacts/google-classroom-mcp
cd google-classroom-mcp
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -e .

3. Sign in once

google-classroom-mcp-auth

A browser window opens; grant the read-only scopes. The refreshable token is cached at ~/.google-classroom-mcp/token.json.

4. Connect an MCP host

opencode (~/.config/opencode/opencode.json):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "google-classroom": {
      "type": "local",
      "command": ["google-classroom-mcp"],
      "enabled": true
    }
  }
}

Claude Desktop / Cursor (claude_desktop_config.json or .cursor/mcp.json):

{
  "mcpServers": {
    "google-classroom": {
      "command": "google-classroom-mcp"
    }
  }
}

If the host cannot find google-classroom-mcp, use the absolute path to the script inside your venv (Windows: ...\.venv\Scripts\google-classroom-mcp.exe).

DeepSeek Harness (dsh)

DeepSeek Harness installs integrations as plugin bundles. Use the ready-made dsh-plugin-google-classroom bundle: open Plugins in DSH and install

github:praisethefacts/dsh-plugin-google-classroom

or skip the bundle and load the overlay directly:

dsh web --patch examples/dsh-overlay.cordis.yml

Both run the server with uvx (no separate pip install needed), so only steps 1–3 above still apply — the Google OAuth client and one-time sign-in. Copy the overlay's insert row into $DSH_HOME/profiles/<name>/cordis.patch.yml to keep it across runs. DSH scrubs credential-looking environment variables before launching stdio servers, so keep the default file-based token at ~/.google-classroom-mcp/token.json rather than CLASSROOM_MCP_* env vars.

5. Optional: run it from a plain DeepSeek script

pip install -e ".[example]"
set DEEPSEEK_API_KEY=sk-...        # PowerShell: $env:DEEPSEEK_API_KEY="sk-..."
python examples/deepseek_agent.py "What do I have due this week?"

The example starts the MCP server, converts its tools into OpenAI-style function schemas, and lets deepseek-chat call them in a loop.

Environment variables

Variable

Purpose

CLASSROOM_MCP_CONFIG_DIR

Override the config directory (default ~/.google-classroom-mcp)

CLASSROOM_MCP_CLIENT_SECRET_FILE

Path to the OAuth client JSON

CLASSROOM_MCP_TOKEN_FILE

Path to the cached token (default <config>/token.json)

CLASSROOM_MCP_CLIENT_ID / CLASSROOM_MCP_CLIENT_SECRET

Inline OAuth client instead of a file

CLASSROOM_MCP_TOKEN_JSON

Inline token JSON, for hosted/remote setups

DEEPSEEK_API_KEY / DEEPSEEK_MODEL

Used only by examples/deepseek_agent.py

Security

  • Only read-only Classroom scopes are requested (see classroom_mcp/auth.py).

  • The token lives outside the repository and is git-ignored. Never commit it.

  • Revoke access anytime at myaccount.google.com/permissions.

Development

pip install -e ".[dev]"
pytest -q

License

MIT

Available Tools

8 tools
get_courseA

Get one course by id, including description and enrollment code.

Args: course_id: Course id from list_courses (numeric string).

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return payload (description and enrollment code), which is genuine behavioral information, but says nothing about failure modes (invalid/unknown id), permissions, or authentication requirements.

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?

Two compact lines: purpose first, then the parameter note. No filler, nothing repeated from the schema's structured fields.

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 one-parameter read tool with no output schema and no annotations, the description covers the essentials: what is fetched, what comes back, and where the id originates. Only error/empty-result behavior is unaddressed, which is a minor gap at this complexity.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate — and it does, documenting the single parameter's provenance ('from list_courses') and its format ('numeric string'). That is meaningful semantics the bare string-typed schema does not supply.

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?

States a specific verb+resource ('Get one course by id') and names the fields returned (description, enrollment code). It is distinguishable from the list_* siblings by being singular and by pointing at list_courses as the id source, though it never explicitly contrasts itself.

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 is implied rather than stated: the note that course_id comes from list_courses suggests the retrieve-after-list flow. There is no explicit when-to-use/when-not-to-use guidance or mention of alternative ways to reach course data.

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

list_announcementsC

Recent announcements for a course.

Args: course_id: Course id from list_courses. limit: Maximum number of announcements to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
course_idYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description bears the full behavioral burden. It hints at a recency window via 'Recent' but never defines it, and says nothing about ordering, pagination, whether results are read-only, or permission requirements for the course.

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?

Front-loaded single line followed by a compact args block; nothing is padded. Minor duplication of schema field names in the Args section, but it costs little.

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 two-parameter read tool with no output schema, the description is minimally viable, but the undefined 'recent' window and absent return/ordering notes leave gaps an agent may need to probe for.

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 0%, so the description must compensate, and it does document both parameters — notably the useful cross-reference that course_id comes from list_courses. The limit explanation restates the parameter name rather than adding meaning (e.g., default, cap, or paging behavior).

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?

States the resource (announcements) and scope (for a course) clearly enough that an agent knows what it returns. It is the only announcements-oriented tool among the siblings, so no explicit differentiation was needed, but the phrasing is nominal rather than a verb+resource statement.

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, no prerequisites, and no alternatives named. An agent cannot tell from the description when this should be preferred over the other list_* tools or what conditions limit its usefulness.

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

list_coursesA

List Google Classroom courses for the signed-in account (teacher or student).

Args: course_states: Optional state filter. Defaults to ["ACTIVE"]. Other values: "ARCHIVED", "PROVISIONED", "DECLINED", "SUSPENDED"; pass several to include multiple states.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_statesNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that results are scoped to the signed-in account and cover both teacher and student roles, but it says nothing about pagination, result limits, ordering, or required OAuth scopes for a list operation that can grow large.

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 purpose sentence is front-loaded and the parameter note is compact and free of padding. Slightly more structure than needed for a one-parameter tool, but nothing wasteful.

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 single-parameter read tool with no output schema and no annotations, this is close to sufficient, but a listing tool should mention pagination behavior or a result cap so the agent knows how to retrieve everything. That omission is the main remaining gap.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate and largely does: it explains course_states is optional, gives the full value set (ARCHIVED, PROVISIONED, DECLINED, SUSPENDED alongside ACTIVE), and notes that multiple values can be combined. The only gap is the stated default ["ACTIVE"] differing from the schema's null default.

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?

States a specific verb and resource ("List Google Classroom courses") plus the scope ("for the signed-in account") and the two role perspectives covered (teacher or student). This clearly distinguishes it from siblings like get_course or list_coursework, though it doesn't name those alternatives.

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 is implied by the verb and the account scoping, but there is no explicit guidance on when to use list_courses versus get_course for a single course, nor any note about when archived/provisioned states should be requested. Adequate but leaves selection logic to inference.

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

list_courseworkA

List coursework (assignments, quizzes, questions, materials) for a course.

Args: course_id: Course id from list_courses. states: Optional state filter. Defaults to ["PUBLISHED"]; can include "DRAFT" or "DELETED". limit: Maximum number of items to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statesNo
course_idYes

TDQS

A3.5/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. It does disclose one genuine behavioral trait beyond the schema: results default to PUBLISHED-only unless states is widened. It omits pagination behavior, ordering, and auth requirements, which is a notable gap for a list endpoint 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.

Conciseness4/5

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

The purpose line is front-loaded and the three argument notes are terse and each earn their place. The Args block formatting is slightly verbose for only three parameters, but nothing is wasted.

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?

With no annotations and no output schema, the description is the only source of behavioral context. It identifies the returned item types, which partly covers the return shape, but gives no pagination, ordering, or truncation semantics for a list tool — enough to call it, not enough to use it confidently.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate, and it does: course_id is sourced ('from list_courses'), states is explained with its default and permissible values, and limit is described as a maximum item count. It lacks format details (e.g., whether states combines as OR, limit bounds), so it stops short of a 5.

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?

States a specific verb (List) and resource (coursework) and even enumerates what counts as coursework (assignments, quizzes, questions, materials), scoped 'for a course'. It does not explicitly contrast itself with siblings like list_courses, though the course_id reference to list_courses makes the hierarchy inferable.

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 is implied: call this to enumerate coursework within a course. The states note ('Defaults to ["PUBLISHED"]; can include "DRAFT" or "DELETED"') gives useful filtering context, but there is no explicit when-to-use vs alternative or exclusion guidance.

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

list_due_soonB

Upcoming coursework across all active courses, sorted by due date.

Args: days: Look-ahead window in days (default 7). include_overdue: Also include items whose due date already passed.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
include_overdueNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose useful behavior beyond the schema: results are sorted by due date and limited to active courses. However, it says nothing about read-only nature, result volume, pagination, or what happens to courses not marked active.

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?

Front-loads the one-line purpose, then uses a compact Args block. The parameter restatement is justified because the schema has zero description coverage, though it is slightly terse on format details.

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 two-parameter read tool with no output schema and no annotations, the description covers purpose, scope, ordering, and both parameters adequately. It stops short of describing return shape (e.g., coursework fields, grouping by course) or result limits, which an agent would benefit from.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: 'days' is defined as a look-ahead window with a stated default, and 'include_overdue' is explained as also returning items whose due date has passed. Only minor gaps remain, such as whether 'days' counts from now and how overdue items interact with the window.

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?

States a concrete verb+resource ('Upcoming coursework across all active courses') plus ordering ('sorted by due date'), so the agent knows it is a scoped, time-windowed list rather than a generic coursework fetch. It does not explicitly name list_coursework as the unfiltered alternative, so differentiation from siblings is only implicit.

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 'upcoming' framing implies the intended context, but there is no explicit statement of when to use this over list_coursework, nor any prerequisite or exclusion guidance. The agent must infer the choice from the tool name and the first sentence alone.

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

list_studentsA

Student roster (names and emails) for a course.

Args: course_id: Course id from list_courses.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

TDQS

A3.6/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' plus the return-content disclosure (names and emails) establishes this as a read, and the course_id provenance is useful. However, it says nothing about permissions, pagination, or what happens with an invalid course_id.

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?

Two short lines, front-loaded with the resource and return fields before the argument note. No wasted prose, though the 'Args:' block is slightly formal for a single parameter.

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 one-parameter read tool with no output schema and no annotations, the description covers the essentials: what it returns and where the argument comes from. Missing pagination/volume and error context keeps it from a 5.

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

Parameters4/5

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

Schema description coverage is 0% — the schema only says 'Course Id'. The description compensates by identifying the argument's source ('Course id from list_courses'), which is real value beyond the schema. It does not describe the id's format or failure behavior, so not a 5.

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?

States a specific resource and scope ('student roster for a course') and discloses the returned fields (names and emails), which distinguishes it from siblings like list_teachers or list_submissions. It does not explicitly name or contrast with those siblings, so it falls short of a 5.

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 is only implied: the tool is clearly for enumerating a course's students, and the note that course_id comes 'from list_courses' hints at the prerequisite call. There is no explicit when-to-use vs when-not-to-use guidance or named alternative.

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

list_submissionsB

Submission state and grades for one assignment.

Args: course_id: Course id from list_courses. coursework_id: Coursework id from list_coursework. user_id: "me" (default) for the signed-in student's submission, a student's numeric id/email, or "-" for all students (teachers only). limit: Maximum number of submissions to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
user_idNome
course_idYes
coursework_idYes

TDQS

B3.1/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 behavioral burden. It implies 'submission state and grades' are returned but does not disclose auth requirements, pagination behavior, whether the limit truncates or throttles, or the default user scoping beyond what is in the schema. For a read tool with zero annotation coverage, 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.

Conciseness4/5

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

One-line purpose followed by a structured Args block. Efficient, though the purpose sentence omits an explicit verb and relies on the name for action. No wasted sentences.

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?

Covers parameters well and states the return content at a high level, but for a read tool with no annotations and no output schema, it omits auth requirements, pagination/limit semantics, and error behavior. Adequate but with clear gaps.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: user_id explains the 'me' default, numeric id/email forms, and the teacher-only '-' value; limit is defined as maximum submissions; course_id and coursework_id are traced to their source tools. This meaningfully exceeds the bare schema titles.

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?

States a specific resource and scope: submission state and grades for one assignment. The verb is implicit ('list') matching the name. It clearly distinguishes itself from sibling list_* tools by naming the assignment-submissions domain, though it does not explicitly contrast with list_students or list_coursework.

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 explicit when-to-use or when-not-to-use guidance. It implies teacher/student context via the '-' value but does not state that listing all students requires teacher privileges as a selection condition, nor does it point to alternatives.

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

list_teachersA

Teacher roster (names and emails) for a course.

Args: course_id: Course id from list_courses.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

TDQS

A3.6/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. It discloses the returned fields (names and emails), which is useful behavioral context, but says nothing about read-only safety, permissions/privacy constraints on student-teacher data, result ordering, or pagination.

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 purpose line is front-loaded and waste-free, and the Args block is terse. The block is slightly redundant with the schema, but with 0% schema coverage it earns its place.

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 single-parameter, no-output-schema list tool this is close to complete: the agent knows what it returns and where the id comes from. Only pagination/ordering behavior and any access constraints are absent.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: it names the single parameter and tells the agent where the value comes from (list_courses), which is the key semantic an agent needs. It stops short of format/validation details, but the core meaning is added.

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?

States a specific verb (list) and resource (teachers), plus the payload returned (names and emails) and its scope (for a course). It is distinguishable from list_students by resource, but it does not explicitly differentiate itself from that sibling or from get_course.

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 is implied: this is the roster tool for a course, and the arg note points the agent to list_courses to obtain the required id. There is no explicit statement of when to prefer this over list_students/get_course or of any prerequisite conditions beyond the id source.

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. 8 tool updatesv0.1.0
    • First observedget_course
    • First observedlist_announcements
    • First observedlist_courses
    • First observedlist_coursework
    • First observedlist_due_soon
    • First observedlist_students
    • First observedlist_submissions
    • First observedlist_teachers

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource and scope: courses, single course, coursework, due-soon across courses, announcements, teachers, students, and submissions. The only near-overlap is list_coursework vs list_due_soon, but the descriptions clearly distinguish per-course listing from cross-course due-date aggregation.

Naming Consistency5/5

Consistent snake_case verb_noun pattern throughout (list_courses, get_course, list_coursework, etc.). The single 'get_course' appropriately pairs with 'list_courses' for singular retrieval, so the convention is predictable.

Tool Count5/5

Eight tools is well-scoped for a read-oriented Classroom client. Each tool earns its place by covering a distinct entity or query, with no redundancy or filler.

Completeness3/5

Read coverage is solid (courses, coursework, submissions, announcements, rosters), but the surface is entirely read-only. Common Classroom mutations—creating courses/coursework, submitting assignments, grading, posting announcements, or updating/deleting—are absent, creating dead ends for write-oriented workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers