Skip to main content
Glama

Google Classroom MCP server for students

npm version MCP Smithery Glama mcp.so

Ask your AI what's actually left to do in Google Classroom.

This is the Google Classroom MCP server: a free, open source MCP server that lets Claude, ChatGPT, Cursor and other AI apps read your Classroom classes, assignments, due dates, missing work, grades on returned work with the comments your teachers leave on them, the points you need to reach a target grade, announcements, course materials and a catch up digest. It is read only. It can never turn in, edit or delete anything. Not affiliated with Google.

Free forever. No sign up and no subscription. Your login details only ever go to Google.

Try it now

Ask these right after setup:

  • "What do I still need to turn in?"

  • "What's overdue?"

  • "What's due this week across all my classes?"

  • "What did my teacher say about my work?"

  • "What do I need to score to get a 90?"

  • "What's new since yesterday?"

Sample answer

The third question goes to get_upcoming_due_dates. It reads your classes and prints one line per assignment, soonest first. Here is what an answer looks like:

- Essay outline (English) due Fri, Oct 23
- Lab write up (Biology) due Fri, Oct 23, 11:59 p.m. UTC
- Problem set 4 (Calculus) due Mon, Oct 26

Every line has the assignment title, the class and the due date. Work you already turned in is left out. Pass days_ahead set to 7 to that tool for a week ahead. Classroom keeps due times in UTC, and the server prints them in your own time zone. More sample answers are in Questions students ask.

Related MCP server: Classroom MCP

Quick start with npx

Install the Google Classroom MCP server with npx, then add it to your AI app. Run npx google-classroom-student-mcp setup to print the config blocks below, with the three Google values filled in when they are set in your environment. Pick your app.

Claude Desktop

Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "classroom": {
      "command": "npx",
      "args": ["-y", "google-classroom-student-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-id",
        "GOOGLE_CLIENT_SECRET": "your-secret",
        "GOOGLE_REFRESH_TOKEN": "paste-from-login"
      }
    }
  }
}

Claude Code

Run this one command:

claude mcp add google-classroom-student-mcp \
  -e GOOGLE_CLIENT_ID=your-id \
  -e GOOGLE_CLIENT_SECRET=your-secret \
  -e GOOGLE_REFRESH_TOKEN=paste-from-login \
  -- npx -y google-classroom-student-mcp

Or put the same JSON block as Claude Desktop in a .mcp.json file in your project folder, or run claude mcp add-json with it.

Cursor

Put this in .cursor/mcp.json in your project folder, or in ~/.cursor/mcp.json to use it everywhere:

{
  "mcpServers": {
    "classroom": {
      "command": "npx",
      "args": ["-y", "google-classroom-student-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-id",
        "GOOGLE_CLIENT_SECRET": "your-secret",
        "GOOGLE_REFRESH_TOKEN": "paste-from-login"
      }
    }
  }
}

Other MCP apps take the same mcpServers JSON, with command set to npx and args set to ["-y", "google-classroom-student-mcp"].

Setup (about 10 minutes, one time)

Google makes every app ask for its own permission, so you create a small private "app" that only you use.

  1. Go to the Google Cloud console and create a project.

  2. Turn on the Google Classroom API for it (APIs & Services > Library).

  3. Under APIs & Services > OAuth consent screen, set it up as External, and add your own Google account as a test user.

  4. Under Credentials, create an OAuth client ID of type Desktop app. Copy the client ID and secret.

  5. Run the one time sign in:

GOOGLE_CLIENT_ID=your-id GOOGLE_CLIENT_SECRET=your-secret npx google-classroom-student-mcp login

Open the link it prints, approve read only access, and copy the three values it prints.

Optional: set CLASSROOM_TIMEZONE to a time zone name such as America/Toronto. Work with a due date but no due time counts as due at the end of that day in this zone. Without it, the time zone of the computer running the server is used.

  1. Add them to your AI app's MCP config. Run npx google-classroom-student-mcp setup and paste the block for your app, or use one of the formats from the Quick start above.

  2. Restart your AI app and ask "what's due this week?"

Run npx google-classroom-student-mcp doctor any time to check that your setup works.

Quick test without the app setup: set GOOGLE_ACCESS_TOKEN to a token from the OAuth Playground with the Classroom read only scopes. It stops working after about an hour.

Questions students ask

Here are the questions students ask, and the tool that answers each one. The answer comes back in the chat, ready to read.

Your question

Tool

What the answer holds

"What do I still need to turn in?"

get_todo

Every assignment you have not handed in, with a link to open it in Classroom

"What does this assignment ask for?"

get_assignment_details

The teacher's description, the files and links attached to it, its due date, points and your status

"Can you give me my due dates as a calendar file?"

export_due_dates_calendar

Build an ICS calendar file of upcoming due dates

"What's overdue?"

get_missing_assignments

Work that was due and is still not handed in

"What's due this week across all my classes?"

get_upcoming_due_dates

Work that is due soon, soonest first

"What did my teacher say about my work?"

get_my_grades

The comment the teacher left on the graded work, with the score and a link to open it in Classroom

"What do I need to score to get a 90?"

get_target_grade

The points you need on the work that is left to reach that percent in each class

"What did my teachers post lately?"

get_announcements

Recent announcements from every class

"What's new since yesterday?"

get_whats_new

New announcements, new grades, overdue work and what is due next

Here is what the answers look like.

Sample answer for get_todo

The question "What do I still need to turn in?" goes to get_todo. It prints everything you have not handed in, and it puts the Classroom page of each one under the title so you can open the work itself.

- Lab safety form (English) due Fri, Oct 9
  link: https://classroom.google.com/c/English/course/1/courseWork/w2
- Chapter 3 questions (Biology) due Mon, Oct 19
  link: https://classroom.google.com/c/Biology/course/2/courseWork/w4
- Essay outline (English) due Fri, Oct 23
  link: https://classroom.google.com/c/English/course/1/courseWork/w1
- Lab write up (Biology) due Fri, Oct 23, 11:59 p.m. UTC
  link: https://classroom.google.com/c/Biology/course/2/courseWork/w3
- Problem set 4 (Calculus) due Mon, Oct 26
  link: https://classroom.google.com/c/Calculus/course/3/courseWork/w5

Work you already turned in is left out, and work with no due date goes last. Pass course_ids to check a few classes only.

Sample answer for get_missing_assignments

The question "What's overdue?" goes to get_missing_assignments. It prints the work that was due and is still not handed in, the most recent due date first.

- Chapter 3 questions (Biology) was due Mon, Oct 19
- Lab safety form (English) was due Fri, Oct 9

Sample answer for get_whats_new

The question "What's new since yesterday?" goes to get_whats_new. It prints one digest with new announcements, new grades, overdue work and what is due next. The times in this sample are in UTC.

New announcements (last 7 days)
- Biology (Wed, Oct 21, 8:00 a.m. UTC) Field trip permission slip due Friday
- English (Tue, Oct 20, 9:00 a.m. UTC) Bring your textbook

New grades (last 7 days)
- Midterm review (Calculus) graded 88/100 on Tue, Oct 20, 3:00 p.m. UTC
  teacher said: Good work on the analysis. Watch the units on question 3.
  link: https://classroom.google.com/c/Calculus/course/3/courseWork/w6

Overdue work
- Chapter 3 questions (Biology) was due Mon, Oct 19
- Lab safety form (English) was due Fri, Oct 9

Due next (14 days)
- Essay outline (English) due Fri, Oct 23
- Lab write up (Biology) due Fri, Oct 23, 11:59 p.m. UTC
- Problem set 4 (Calculus) due Mon, Oct 26

Pass since_days to look further back and days_ahead to look further ahead.

Tools

All tools are read only.

Tool

What it does

get_my_courses

Your active classes and their IDs

get_todo

Everything assigned that you haven't turned in

export_due_dates_calendar

Build an ICS calendar file of upcoming due dates

get_upcoming_due_dates

Work due soon, soonest first

get_missing_assignments

Past due work you haven't turned in

get_assignments

Assignments for a class with due dates and status

get_assignment_details

Everything about one assignment: description, attachments, due date, points and status

get_my_grades

Points earned on returned work for each class, with the comment the teacher left

get_target_grade

Points needed on the work left to reach a target percent

get_announcements

Recent announcements

get_course_materials

Materials posted in a class

get_whats_new

One catch up digest: new announcements, new grades, overdue work and what is due next

The same list is in plain text in llms.txt, one line per tool with its description and the arguments it takes. That file ships with the package, so site indexes and AI apps that read plain text files can pick it up.

get_todo, get_assignments, get_assignment_details, get_announcements and get_course_materials print the Classroom page of each item under the title, so the AI can hand the student a direct link to the work. get_course_materials also prints the Drive link of every file attached to a material. Classroom sends a link only for published items.

Google Classroom has no overall course grade, so get_my_grades adds up graded work only and says so. When a class weights its work by grading category, it also prints a weighted percent, using only the categories that have graded work. get_target_grade still uses plain points.

get_my_grades and get_whats_new print what the teacher wrote when they returned the work, under the score, with the Classroom page of the work. get_my_grades lists the graded work that has a comment under each class.

get_todo, export_due_dates_calendar, get_upcoming_due_dates, get_missing_assignments, get_my_grades, get_target_grade and get_whats_new accept an optional list of course IDs (course_ids), so you can ask about a few classes only instead of all of them. get_upcoming_due_dates and get_whats_new also accept an optional number of days to look ahead (days_ahead). get_announcements and get_whats_new also accept an optional number of days to look back (since_days), which defaults to 7 days in the digest and means no date filter in announcements. get_announcements accepts course IDs (course_ids) too. get_target_grade takes a required target_percent from 0 to 100, which is the class percent you want.

get_target_grade adds up the points earned on graded work and the points the work that is left is worth. It then works out how many of those points you need to reach target_percent. Work counts as left when it has points and no grade yet, and work the teacher already returned without a grade is left out. If the target needs more points than the work left is worth, the answer says so and gives the best percent you can still reach. The server only sees the points on each piece of work, not any weighting the teacher may use, so the answer counts every point the same.

get_whats_new is the catch up digest. It prints new announcements, new grades with the comment the teacher left, overdue work and what is due next in one answer. An announcement counts as new when it was posted or changed inside the window. The date of a new grade comes from the teacher's comment on the work when there is one, otherwise from the last change to the assignment. The comment itself is printed under the grade.

Google Classroom vs Brightspace MCP

Google Classroom and D2L Brightspace are different platforms, so they need different servers. This one reads Google Classroom. The Brightspace MCP reads D2L Brightspace. Here is how they line up.

Google Classroom MCP (this one)

Brightspace MCP

Platform

Google Classroom, the one inside Google Workspace for Education

D2L Brightspace, common in colleges and universities

Install

npx -y google-classroom-student-mcp setup, which prints the config for your app to paste, with the three values filled in when they are in your environment

npx brightspace-d2l-mcp setup, which writes the config for you

Sign in

You make your own OAuth app in the Google Cloud console, run one time sign in, then paste the client ID, the client secret and the refresh token

You pick your school and sign in with your own school account in a browser window. Any sign in method your school uses works, and your password is never stored

After setup

While your Cloud app is in testing mode, Google expires the refresh token every 7 days, so you run the login command again now and then

It stays signed in quietly, and a browser window only opens when your school asks you to sign in again

What your school has to do

Nothing. Your own Google account and your own Cloud project are enough, though a school admin can block third party apps

Nothing. It uses your own student sign in, so no API key from an administrator is needed

Classes and work

Active classes, then every assignment with its due date, its points, whether you turned it in and a link to open it in Classroom

Enrolled courses, then assignments and quizzes with the real submission status of each one

Grades

Points earned on returned work, added up per class, plus a target grade tool that says how many points you need on the work that is left. Google Classroom has no overall grade, so the percentage is only over graded work

Grade breakdown per course with points, percentages and instructor comments, plus a target grade tool that tells you what you need on the work that is left

News

Recent announcements, and a catch up digest with new announcements, new grades, overdue work and what is due next

Recent announcements, and a catch up digest that also covers newly marked work, unread discussions and quizzes you have not tried yet

Course files

Materials posted in a class, each with a link to open it and the Drive link of every attached file

Course modules, files, links, the syllabus, the files attached to an assignment, discussions, class lists and calendar events such as exams and labs. It can also save a course file to a folder you pick and build a calendar file of your deadlines

Read only

Yes, it can never turn in, edit or delete anything

Yes, it only reads from Brightspace

Price and license

Free forever, open source, MIT license

Open source, MIT license, and it runs on your own computer

Both servers only read, so neither one can hand in your work for you. If your classes are in Google Classroom, install this one. If your school runs D2L Brightspace, install the Brightspace MCP instead.

Other Brightspace servers exist too, such as brightspace-mcp-server and brightspace-mcp. The author keeps a side by side comparison of them at brightspace-mcp.netlify.app/compare.

Privacy and security

  • Your credentials stay on your computer and are only sent to Google.

  • Nothing is sent to any other server by this project.

  • Only read only permissions are requested. Remove access any time at myaccount.google.com/permissions.

Troubleshooting

Message

Fix

Not signed in

Run login again to get a new refresh token.

Sign in failed, expired or revoked

While your app is in testing mode, Google expires refresh tokens after 7 days. Run login again.

Access denied

Your school's Google admin may block third party apps. Ask your admin or use a personal account.

Not found

Check the course or item ID in your request.

Rate limited

Too many requests. Wait a minute and try again.

Google did not return a refresh token

Remove the app from your connected apps and run login again.

Development

npm install
npm run build
npm test

Tests run against a fake Google server, so they need no account or network. Other tests check that the tool table in this README, llms.txt and glama.json still list every tool, that the tool descriptions in llms.txt and glama.json match the code, that every sample answer in this README and in llms.txt matches what the tool really prints, and that the version matches package.json.

The version that --version prints and the MCP handshake sends comes from package.json, so bump the version there and nowhere else.

The test runner needs Node 22.12 or newer. The server itself runs on Node 20 or newer.

More free student MCP servers

All free, open source and read only where they touch your accounts. Browse the full list at brightspacemcp.com/more-mcps.

This server is also listed in the Smithery, Glama and mcp.so directories.

Server

What it does

Brightspace MCP

D2L Brightspace for AI. Due dates with real submission status, grades, a target grade calculator and course files.

Canvas MCP

Canvas LMS for AI, read only. Due dates, missing work, grades and announcements.

Moodle MCP

Moodle for AI, read only. Due dates, overdue work, grades and announcements.

GPA Calculator MCP

GPA, grade conversion and the grade you need on the final, for AI. Works offline, no account.

Citations MCP

APA, MLA and Chicago citations from a DOI, an ISBN or typed details. No account.

Study Planner MCP

Exam study schedules, spaced repetition dates, pomodoro plans and assignment milestones. Works offline.

Paper Finder MCP

Search scholarly papers, find open access copies and related work through OpenAlex. No key needed.

BibTeX Reference Manager MCP

Clean, convert, dedupe and lint BibTeX, RIS and CSL JSON reference lists, and make cite keys. Works offline.

Open Textbook Finder MCP

Find free legal copies of textbooks on OpenStax, DOAB and Open Library, look up editions by ISBN and suggest cheaper older ones.

STEM Calculator MCP

Chemistry and physics homework math: molar mass, balancing equations, grams to moles, unit conversion and significant figures. Works offline.

Essay Stats MCP

Offline writing metrics for essays. Word and page counts, readability scores, passive voice, repeated openers, filler words, long sentences and word limit checks, so students can check their work against assignment requirements. No account, no network.

Syllabus to Calendar MCP

Syllabus to calendar MCP server. Extract dates from syllabus text, build an ics calendar, expand recurring classes and merge calendars. Works offline, no account.

Job Application Tracker MCP

Job application tracker MCP server. Track internships, jobs, interviews and deadlines offline, see what is coming up, and export your list as CSV or Markdown. No account and no API keys.

Picking between the two school platforms? See Google Classroom vs Brightspace MCP.

License

MIT

Available Tools

12 tools
export_due_dates_calendarExport due dates calendarA
Read-only

Build an ICS calendar file of upcoming due dates so they can be imported into a calendar app. Pass course_ids to limit it, or leave empty for all active classes. Use this when the user asks 'Can you give me my due dates as a calendar file?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds that the output is an ICS artifact intended for import and that empty input defaults to all active classes, but it never defines the 'upcoming' time window or whether the result is file content, a URL, or a download.

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?

Three short sentences, front-loaded with the artifact produced and followed by scoping and a usage trigger; nothing is padded. The quoted user phrasing is slightly verbose but functions as a useful selection cue.

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 output schema, the description carries the burden of explaining what comes back, and it leaves ambiguous whether the ICS is returned as text, a file, or a link. The undefined 'upcoming' horizon is a second gap for a tool whose entire value is the date range it covers.

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 the single parameter is already documented, including a pointer to get_my_courses. The description only restates the empty-means-all-active-classes default, which the schema already says, so baseline 3 applies.

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 names a specific verb (build/export), resource (upcoming due dates), and output artifact (ICS calendar file), which is far more informative than the title alone. It doesn't explicitly contrast itself with the close sibling get_upcoming_due_dates, so an agent must infer the difference from the 'calendar file' framing.

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?

It gives a concrete trigger via the quoted user request ('Can you give me my due dates as a calendar file?') and explains the scope decision for the optional parameter (limit by course_ids or leave empty for all active classes). It stops short of naming an alternative like get_upcoming_due_dates for when the user just wants a list rather than a file.

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

get_announcementsAnnouncementsA
Read-only

Recent announcements, each with a link to open it in Classroom. Pass course_ids or since_days to limit how far back they go, or leave empty for all active classes. Use this when the user asks 'Did my teacher post anything new?' or 'What did my teacher announce?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.
since_daysNoOnly show announcements updated within this many days back from now. Leave empty to show every recent announcement.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only and open-world access, so the description's job is lighter. It adds genuinely useful behavior: the default scope is all active classes, results include a direct Classroom link, and no filter means every 'recent' announcement. The vague boundary of 'recent' is left undefined.

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 with what the tool returns, then scoping, then the user-intent examples. The scoping sentence partially duplicates the schema but the example queries earn their place; minor redundancy keeps it below 5.

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?

With no output schema, the description carries return-value burden and does describe the link-carrying shape, though it omits other announcement fields, ordering, and any result cap. Combined with annotations, this is enough for an agent to call it correctly, with minor unknowns.

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%, so both parameters are fully documented in the schema, including the get_my_courses lookup hint. The description restates the same filtering intent without adding format, syntax, or interaction details, so baseline 3 applies.

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 precisely ('Recent announcements') and even the return shape ('each with a link to open it in Classroom'). It is distinguishable by resource from siblings such as get_course_materials and get_whats_new, though it never explicitly contrasts with get_whats_new, which could plausibly overlap.

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?

Gives concrete trigger phrasing ('Did my teacher post anything new?') and explains the scoping choice: pass course_ids or since_days, or leave empty for all active classes. It lacks an explicit when-not-to-use or a named alternative, so it stops short of a 5.

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

get_assignment_detailsAssignment detailsA
Read-only

Everything about one assignment: what the teacher wrote in the description, the files and links attached to it, its due date, points and your status. Pass the course ID and the assignment ID. Use this when the user asks 'What does this assignment ask for?' or 'What do I need to turn in?' about one specific assignment.

NameRequiredDescriptionDefault
course_idYesClassroom course ID. Use get_my_courses to find it.
course_work_idYesThe assignment ID. Use get_assignments to find it.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds value by disclosing the returned payload (description body, attachments, due date, points, personal status), which matters since there is no output schema. It does not cover error behavior, permissions, or what happens with an invalid ID.

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?

Three sentences, front-loaded with the capability, then the payload, then the invocation and usage triggers. No sentence is filler; the usage examples do real routing work.

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

Completeness5/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 full schema coverage and annotations covering the safety profile, the description supplies the remaining pieces an agent needs: what is returned, how to call it, and when it applies. Nothing material is missing.

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 the schema already documents both parameters, including pointers to get_my_courses and get_assignments for lookup. The description only restates 'Pass the course ID and the assignment ID', adding no format or type guidance beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ('Everything about one assignment') and enumerates exactly what is returned: description text, attachments/links, due date, points, and submission status. This is clearly distinguishable from sibling list tools like get_assignments or get_upcoming_due_dates.

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?

Gives concrete triggering user questions ('What does this assignment ask for?', 'What do I need to turn in?') and scopes usage to 'one specific assignment', which implicitly separates it from the list tools. It never names an alternative sibling explicitly or states a when-not condition, so it falls short of a 5.

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

get_assignmentsClass assignmentsA
Read-only

Assignments for one class with due dates and status, each with a link to open it in Classroom. Use this when the user asks 'What's due in this class?' or wants every assignment and its points for a single class.

NameRequiredDescriptionDefault
course_idYesClassroom course ID. Use get_my_courses to find it.

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already establish that this is a read-only, open-world operation, so the lower bar applies. The description adds useful return context (due dates, status, Classroom links, points), but it does not cover pagination, ordering, permissions, or the full response shape.

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 tightly written sentences. The first front-loads what the tool returns, and the second gives the primary usage scenario without unnecessary repetition.

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 one-parameter read tool with annotations and no output schema, the description is largely complete: it states scope, return fields, and a typical user request. Minor gaps remain around sibling differentiation and response ordering/pagination.

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 single course_id parameter is fully documented in the schema, including how to obtain it via get_my_courses. The description reinforces that the tool operates on one class but adds no syntax or formatting details beyond 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 specifies the resource (assignments for one class) and the returned fields (due dates, status, links, points). It distinguishes the scope as single-class rather than all-class, though it does not explicitly name overlapping siblings such as get_todo or get_upcoming_due_dates.

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?

It provides a concrete use case: when the user asks what is due in a particular class or wants every assignment and its points for one class. It does not explicitly state when to prefer get_todo, get_upcoming_due_dates, or get_missing_assignments instead, but the single-class framing gives clear context.

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

get_course_materialsClass materialsA
Read-only

Posted materials for one class, grouped by topic with the Drive link of every attached file. Use this when the user asks 'What materials did my teacher post?' or 'What did we cover in unit 3?' or wants the readings, slides and handouts for one class.

NameRequiredDescriptionDefault
course_idYesClassroom course ID. Use get_my_courses to find it.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description adds the otherwise-unknown return shape — materials grouped by topic with a Drive link for each attached file. With no output schema present, that return-format disclosure is the main value add, though pagination and coverage limits are unmentioned.

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?

Lead sentence delivers the resource and return shape up front, and the second sentence is a single purpose clause with example queries. Slightly example-heavy for a one-parameter tool, but no sentence is redundant.

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 read tool with one fully documented parameter and annotations covering safety, the description supplies what's missing: what the result looks like (topic grouping plus per-file Drive links). Nothing critical is absent, though an agent gets no sense of result size or whether all topics always appear.

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?

Only one parameter and the schema already documents it fully, including the pointer to get_my_courses for obtaining the ID. The description adds nothing about course_id, so the schema does all the work and the baseline of 3 applies.

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?

States a specific resource (posted class materials for one class), its organization (grouped by topic), and its payload (Drive link per attached file). That distinguishes it cleanly from sibling tools such as get_assignments and get_announcements, which return different artifacts from the same course.

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?

Gives three concrete trigger phrasings ('What materials did my teacher post?', 'What did we cover in unit 3?', 'readings, slides and handouts'), which makes routing from natural user language straightforward. It does not explicitly exclude neighbors like get_announcements, so the boundary is inferred rather than stated.

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

get_missing_assignmentsMissing assignmentsA
Read-only

Past due work that has not been turned in. Pass course_ids to limit it, or leave empty for all active classes. Use this when the user asks 'What's overdue?' or 'What am I behind on?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds meaningful behavioral detail beyond that: the result set is restricted to past-due and unsubmitted items, and the empty-parameter default resolves to 'all active classes'. It stops short of describing result fields or ordering, which keeps it at 4.

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?

Three short sentences, front-loaded with what the tool returns, then the scoping parameter, then invocation cues. Nothing is redundant or padded.

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 optional parameter with full schema coverage and annotations, this covers everything an agent needs to decide and call. The only minor gap is that no return shape is described and no output schema exists, so the agent knows less about what fields come back.

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 the schema already documents that course_ids is optional and that empty means all active classes, plus the pointer to get_my_courses. The description restates that default without adding new semantics, so the baseline 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?

States a specific resource and a precise filter: past-due work that has not been submitted. It is clearly distinguishable from sibling tools like get_todo, get_upcoming_due_dates, and get_assignments based on the 'overdue' framing alone.

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?

Gives concrete user phrasings ('What's overdue?', 'What am I behind on?') plus the scoping rule (pass course_ids or leave empty for all active classes). No explicit 'when not to use' or named alternative tool, which keeps it just short of a 5.

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

get_my_coursesMy coursesA
Read-only

List the student's active Google Classroom classes with their IDs. Use this when the user asks 'What classes am I in?' or needs a course ID to pass to another tool.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one real behavioral detail beyond that: the list is limited to 'active' classes, implying archived/inactive courses are excluded. It says nothing about ordering, pagination, or how 'active' is determined, so the added context is modest.

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 sentences, no filler, and the core purpose is front-loaded before the usage hint. Every clause carries information an agent would otherwise have to infer.

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

Completeness5/5

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

For a zero-parameter read tool with readOnly/openWorld annotations, this is sufficient: the description covers what is returned (courses plus IDs), the scope (active), and the reason to call it. No output schema exists, but the return content is characterized well enough for correct invocation.

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?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The phrase 'with their IDs' usefully describes the payload shape rather than any input.

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?

States a specific verb ('List') plus the exact resource ('the student's active Google Classroom classes') and the key returned field ('their IDs'). This is clearly separable from siblings like get_assignments, get_my_grades, or get_course_materials, which operate on content within courses rather than the course roster itself.

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?

Gives a concrete trigger ('What classes am I in?') and a downstream reason to call it ('needs a course ID to pass to another tool'), which is exactly the routing signal an agent needs. It stops short of naming an explicit alternative or a when-not condition, so it lands just below the top band.

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

get_my_gradesMy gradesA
Read-only

Grades on returned work for each class, with the comment the teacher left on the work. Google Classroom has no overall grade, so this adds up graded work only, and adds a weighted percent when the class uses grading categories with weights. Pass course_ids to limit it, or leave empty for all active classes. Use this when the user asks 'How am I doing in my classes?' or 'What grades have I gotten back?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's job is to add context beyond safety. It does that well: it discloses that there is no overall grade, that the number is an aggregation of graded work only, and that weighting applies only when grading categories with weights exist. It omits return shape and any rate-limit or pagination behavior, keeping it below 5.

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 with the core purpose, then the aggregation caveat, then parameter guidance, then trigger examples. Every sentence carries information; the only mild cost is length across four sentences, but nothing is redundant with the schema beyond the empty-parameter restatement.

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?

With no output schema, the description must convey what comes back, and it does: per-class grades, teacher comments, and a weighted percent when applicable. Combined with a single optional parameter and clear annotations, an agent has enough to call it correctly; only the exact response structure and error/edge behavior are unstated.

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% and the schema already says 'Classroom course IDs to check. Leave empty for all active classes.' The description restates the same empty-means-all-active-classes behavior without adding format, limits, or validation details, so baseline 3 applies.

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?

States a specific resource and scope: 'Grades on returned work for each class, with the comment the teacher left.' It also explains the derived semantics (no overall grade in Classroom, so it sums graded work and computes a weighted percent when categories have weights), which distinguishes it from siblings like get_assignments or get_assignment_details.

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?

Gives explicit trigger phrasing ('How am I doing in my classes?', 'What grades have I gotten back?') and explains the parameter branch: pass course_ids to limit, leave empty for all active classes. It does not say when to prefer a sibling such as get_target_grade or get_assignment_details instead, so it stops short of a 5.

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

get_target_gradeTarget gradeA
Read-only

Points needed on the work that is left to reach a target percent in each class. Adds up the points earned on graded work and the points the work left is worth, then says how many of those points you still need. target_percent is the percent you want, from 0 to 100. Pass course_ids to limit it, or leave empty for all active classes. Use this when the user asks 'What do I need to score to get a 90?' or 'Can I still get an A in this class?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.
target_percentYesThe class percent you want, from 0 to 100. For example 90.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior: it aggregates earned and remaining points and reports the points still needed, with scoping via course_ids. It does not explain edge cases like impossible targets or output structure.

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?

It is front-loaded with the core purpose and then adds only useful clarification about target_percent, course scoping, and example user intents. There is no redundant or wasted text.

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

Completeness5/5

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

For a two-parameter read-only tool with no output schema, the description is complete enough: it explains what is computed, how target_percent and course_ids affect scope, and what the user receives. No critical calling information is missing.

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%, so both parameters are already documented in the input schema. The description restates target_percent’s 0–100 range and course_ids’ empty-means-all-active behavior but adds no syntax or format detail beyond the schema.

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 computation: points needed on remaining work to reach a target percent in each class. It clearly identifies the resource and outcome, making it distinguishable from siblings like get_my_grades.

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?

It gives concrete user-question examples such as “What do I need to score to get a 90?” and explains that course_ids limits scope while empty means all active classes. It lacks an explicit when-not or named alternative such as get_my_grades for current grades.

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

get_todoTo-do listA
Read-only

Everything assigned that the student has not turned in yet, each with a link to open it in Classroom. Pass course_ids to limit it, or leave empty for all active classes. Use this when the user asks 'What do I still have to do?' or 'What's left to turn in across all my classes?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the description need not carry the safety burden. It does add useful context beyond them: the result includes an openable Classroom link per item, and an empty filter means all active classes rather than none. Nothing about pagination, result caps, or permissions is disclosed, so the description is helpful but not rich.

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?

Three sentences: what is returned first, then how to scope it, then example user phrasings. That front-loading is good. The scoping sentence duplicates the schema description, so it earns slightly less than a full 5, but nothing is padded.

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 read tool with annotations and no output schema, the description covers scope, default behavior, and return payload (links), which is enough to call it correctly. The remaining gap is that it never clarifies how it relates to get_missing_assignments or get_assignments, but that is a minor omission for a tool this simple.

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%: course_ids is documented as 'Classroom course IDs to check. Leave empty for all active classes', and the item description points to get_my_courses. The description's 'Pass course_ids to limit it, or leave empty for all active classes' restates that rather than adding format guidance or semantics, so the baseline of 3 applies.

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 states a specific verb-plus-resource ('everything assigned that the student has not turned in yet') and mentions the returned link, so an agent can tell what the tool does. It does not distinguish this tool from the close sibling get_missing_assignments, whose scope ('not turned in') sounds nearly identical, so the tool's purpose is clear but not fully differentiated.

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 description gives concrete triggers by quoting the user questions it answers ('What do I still have to do?', 'What's left to turn in across all my classes?') and explains when to pass course_ids and when to leave it empty. It names no alternatives or exclusions, so the agent is left to infer on its own when get_missing_assignments or get_upcoming_due_dates would be better.

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

get_upcoming_due_datesUpcoming due datesA
Read-only

Work that is due soon and not turned in, soonest first. Pass course_ids or days_ahead to narrow it, or leave both empty. Use this when the user asks 'What's due this week across all my classes?' or 'What's coming up?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.
days_aheadNoOnly show work due within this many days from now. Leave empty for every future due date.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered; the description adds genuinely new behavioral facts: results are scoped to not-turned-in work, ordered soonest-first, and both parameters can be omitted with a defined default (all active classes, all future dates). Nothing contradicts the annotations. It stops short of noting any result cap or volume expectation for a cross-class query.

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?

Three short sentences: what it returns and in what order, then how to narrow, then when to reach for it. The most useful information is front-loaded and no sentence is redundant padding.

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?

With only two optional parameters, full schema coverage, and no output schema to compensate for, the description covers what the tool returns, its ordering, its defaults, and its trigger. It is slightly thin on how the result set is bounded for 'all classes', but that is a minor omission for a simple read.

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, including the 'leave empty' defaults and the pointer to get_my_courses. The description restates the same narrow-or-omit behavior rather than adding syntax, format, or interaction detail (e.g., how the two filters combine), so baseline 3 applies.

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 filter: work that is due soon and not turned in, returned soonest first. That is concrete enough to predict the payload, but it never names or contrasts the closest siblings (get_todo, get_missing_assignments, get_assignments), so an agent must infer which of these four overlapping list tools to pick.

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?

Gives a concrete when-to-use trigger in the form of user questions ('What's due this week across all my classes?', 'What's coming up?'), which is more actionable than generic 'use for due dates' phrasing. It lacks any when-not guidance or explicit routing away from get_missing_assignments/get_todo, which is the main gap given how similar the siblings are.

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

get_whats_newWhat's newA
Read-only

One catch up digest for every class: new announcements, newly graded work with the comment the teacher left, overdue work and what is due next. Pass course_ids to limit it, since_days for how far back to look and days_ahead for how far ahead to look. Use this when the user asks 'What's new since yesterday?' or 'What changed in my classes?'

NameRequiredDescriptionDefault
course_idsNoClassroom course IDs to check. Leave empty for all active classes.
days_aheadNoHow many days ahead to look for work that is due next. Leave empty for the next 14 days.
since_daysNoHow many days back to look for new announcements and new grades. Leave empty for the last 7 days.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real behavioral context beyond that: it is an aggregating digest, it includes teacher comments on graded work, and it spans both backward-looking (overdue) and forward-looking (due next) windows — useful framing for interpreting results.

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?

Three sentences, front-loaded with the core purpose, then parameter guidance, then triggering examples. No filler and the most decision-relevant information comes first.

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?

With no output schema, the description carries the burden of describing returns, and it does so at a useful level by naming the four result categories and the inclusion of teacher comments. It stops short of describing result shape or ordering, but for a read-only digest this is close to complete.

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%, and the schema already documents each parameter including defaults. The description restates the same semantics ('Pass course_ids to limit it, since_days for how far back, days_ahead for how far ahead') without adding format details, valid ranges, or edge-case behavior beyond the schema. Baseline 3 applies.

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+resource ('one catch up digest for every class') and enumerates the four content categories (announcements, newly graded work with teacher comments, overdue work, due next). The word 'digest' plus the enumeration clearly distinguishes it from the single-purpose siblings like get_announcements or get_missing_assignments.

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?

It gives concrete triggering user utterances ('What's new since yesterday?', 'What changed in my classes?'), which is strong positive guidance. It does not explicitly name when to prefer a narrower sibling tool (e.g. get_announcements for announcements only), so the routing boundary is inferred rather than stated.

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. 3 tool updatesv0.1.9
    • Addedexport_due_dates_calendar
    • Changedget_announcements2 fields changed
      • addedInput schema / properties / course_ids / description
        Added value: +"Classroom course IDs to check. Leave empty for all active classes."
      • addedInput schema / properties / since_days
        Added value: +{
        +  "description": "Only show announcements updated within this many days back from now. Leave empty to show every recent announcement.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Addedget_assignment_details
  2. 10 tool updatesv0.1.5
    • First observedget_announcements
    • First observedget_assignments
    • First observedget_course_materials
    • First observedget_missing_assignments
    • First observedget_my_courses
    • First observedget_my_grades
    • First observedget_target_grade
    • First observedget_todo
    • First observedget_upcoming_due_dates
    • First observedget_whats_new

TDQS

A4/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target a clear resource+scope (courses, grades, announcements, materials, one assignment's details, target grade, calendar export). The main overlap is the trio get_todo / get_missing_assignments / get_upcoming_due_dates, which all return unturned-in work and differ only by time window, and get_whats_new aggregates several other tools' outputs. The descriptions do spell out the distinctions ('past due' vs 'due soon' vs 'everything left'), so an agent can pick correctly, but the boundaries require reading.

Naming Consistency4/5

Eleven of twelve tools use a consistent get_<noun> snake_case pattern, with clear domain nouns. export_due_dates_calendar deviates in verb, though the different verb reflects a genuinely different action (file generation) rather than sloppiness. Minor inconsistency only.

Tool Count5/5

Twelve tools sit squarely in the well-scoped range, and each maps to a distinct student question (what am I in, what's due, what's overdue, what's graded, what did the teacher post, what do I need to score). No filler or duplicate tools; the aggregate tools (get_todo, get_whats_new) exist for convenience rather than padding.

Completeness4/5

Read-only coverage of the student domain is strong: courses, assignments, per-assignment detail, materials, announcements, grades, missing/upcoming work, target-grade math, digest, and calendar export. Gaps are the write side of the lifecycle — there is no way to submit/turn in work, mark something done, or comment — plus no per-announcement or per-material detail fetch. These are workarounds (links to Classroom) rather than dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers