MCP Tools Reference: classroommcp.googleapis.com

Tool: create_announcement

Creates a new announcement in a course stream. Requires a teacher role in the course. Announcements are always created as a DRAFT that students cannot see; if scheduleDate is set, it is published automatically on that date. Otherwise, tell the user to publish it in Classroom, because this tool cannot publish announcements.

Classroom has no web link to a single draft announcement. To link the user to the new announcement, use the course Stream page, https://classroom.google.com/c/{course_id}, where the teacher can find it in the Drafts section to review or publish it. Use IDs exactly as returned; never guess or modify them.

The following code sample shows how to use curl to call the create_announcement MCP tool.

Curl Request
curl --location 'https://classroommcp.googleapis.com/mcp/v1' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'content-type: application/json' \
--header 'accept: application/json, text/event-stream' \
--data '{
  "method": "tools/call",
  "params": {
    "name": "create_announcement",
    "arguments": {
      // Provide these details according to the MCP tool specification.
    }
  },
  "jsonrpc": "2.0",
  "id": 1
}'

Input Schema

Request to create an announcement.

CreateAnnouncementRequest

JSON representation
{
  "courseId": string,
  "text": string,
  "materials": [
    {
      object (MaterialInput)
    }
  ],
  "assigneeIds": [
    string
  ],
  "scheduleDate": string,
  "timeZone": string
}
Fields
courseId

string

Required. Identifier of the course.

text

string

Required. Text of the announcement.

materials[]

object (MaterialInput)

Optional. Materials to attach. At most 20.

assigneeIds[]

string

Optional. Identifiers of the students who can see the announcement, from get_course_roster. Empty means all students.

scheduleDate

string

Optional. Date to publish the announcement automatically (YYYY-MM-DD). Time defaults to 8am in the user's timezone and is editable in the UI.

timeZone

string

Required. The user's IANA timezone (e.g. "America/Los_Angeles"). Dates in this request are interpreted in it and dates in the response are formatted in it, matching what the user sees in Classroom.

MaterialInput

JSON representation
{

  "driveFile": {
    object (DriveFileInput)
  },
  "youtubeVideoId": string,
  "linkUrl": string,
  "formUrl": string,
  "notebook": {
    object (GeminiNotebook)
  }
}
Fields
Union field content. The attachment content. content can be only one of the following:
driveFile

object (DriveFileInput)

Google Drive file to attach.

youtubeVideoId

string

Identifier of the YouTube video to attach (e.g. "dQw4w9WgXcQ").

linkUrl

string

URL of the web page to attach.

formUrl

string

URL of the Google Form to attach.

notebook

object (GeminiNotebook)

Gemini Notebook to attach.

DriveFileInput

JSON representation
{
  "id": string,
  "shareMode": enum (ShareMode)
}
Fields
id

string

Required. Identifier of the Drive file.

shareMode

enum (ShareMode)

Required. How students get the file: VIEW (read only), EDIT (everyone edits the same file), or COPY (each student gets their own copy).

GeminiNotebook

JSON representation
{
  "id": string,
  "title": string
}
Fields
id

string

Required. Identifier of the Notebook.

title

string

Title of the Notebook.

ShareMode

Sharing settings for the Drive file.

Enums
SHARE_MODE_UNSPECIFIED Unspecified sharing mode.
VIEW Students can view the shared file.
EDIT Students can edit the shared file.
COPY Students get a personal copy of the shared file.

Output Schema

Detailed metadata of an announcement.

Announcement

JSON representation
{
  "id": string,
  "materials": [
    {
      object (Material)
    }
  ],
  "assigneeIds": [
    string
  ],
  "publishDate": string,
  "state": enum (State),

  "text": string

  "scheduleDate": string
}
Fields
id

string

Output only. Identifier. Announcement ID.

materials[]

object (Material)

Materials attached to this announcement.

assigneeIds[]

string

List of student IDs this announcement is visible to (unset means all students).

publishDate

string

Output only. Date the announcement was published (YYYY-MM-DD).

state

enum (State)

Output only. State of the announcement.

text

string

Text of the announcement.

scheduleDate

string

Date the announcement is scheduled to be published (YYYY-MM-DD). Time defaults to 8am in the user's timezone and is editable in the UI.

Material

JSON representation
{
  "id": string,

  "sharedDriveFile": {
    object (SharedDriveFile)
  },
  "youtubeVideo": {
    object (YouTubeVideo)
  },
  "link": {
    object (Link)
  },
  "form": {
    object (Form)
  },
  "notebook": {
    object (GeminiNotebook)
  }
}
Fields
id

string

Output only. Identifier of the material. Use it to remove the material with UpdateCourseWorkRequest.removeMaterialIds.

Union field content. The attachment content. content can be only one of the following:
sharedDriveFile

object (SharedDriveFile)

Google Drive file attachment.

youtubeVideo

object (YouTubeVideo)

YouTube video attachment.

link

object (Link)

URL link attachment.

form

object (Form)

Google Forms attachment.

notebook

object (GeminiNotebook)

Gemini Notebook attachment.

SharedDriveFile

JSON representation
{
  "file": {
    object (DriveFile)
  },
  "shareMode": enum (ShareMode)
}
Fields
file

object (DriveFile)

Drive file details.

shareMode

enum (ShareMode)

Required. How students get the file: VIEW (read only), EDIT (everyone edits the same file), or COPY (each student gets their own copy).

DriveFile

JSON representation
{
  "id": string,
  "title": string,
  "url": string
}
Fields
id

string

Required. Identifier of the Drive file.

title

string

Output only. Title of the Drive file.

url

string

Output only. URL of the Drive file.

YouTubeVideo

JSON representation
{
  "id": string,
  "title": string
}
Fields
id

string

Required. YouTube video ID.

title

string

Output only. Title of the YouTube video.

JSON representation
{
  "url": string,
  "title": string
}
Fields
url

string

Required. URL of the link.

title

string

Output only. Title of the link.

Form

JSON representation
{
  "formUrl": string,
  "title": string,
  "responseUrl": string
}
Fields
formUrl

string

Required. URL of the form.

title

string

Output only. Title of the form.

responseUrl

string

Output only. URL of the form response. Only set if responses have been recorded and only when the requesting user is an editor of the form.

GeminiNotebook

JSON representation
{
  "id": string,
  "title": string
}
Fields
id

string

Required. Identifier of the Notebook.

title

string

Title of the Notebook.

ShareMode

Sharing settings for the Drive file.

Enums
SHARE_MODE_UNSPECIFIED Unspecified sharing mode.
VIEW Students can view the shared file.
EDIT Students can edit the shared file.
COPY Students get a personal copy of the shared file.

State

States of an announcement.

Enums
STATE_UNSPECIFIED Unspecified state.
PUBLISHED Announcement is published and visible to students.
DRAFT Announcement is a draft.

Tool Annotations

Tool annotations are sent to MCP clients to describe the basic risk of a given tool. Most clients treat these hints as untrusted, but they can be used to decide when a confirmation prompt might be sent to a user.

Along with the title string, the following boolean hints are defined as follows:

  • readOnlyHint: If true, the tool doesn't modify its environment. Default: false.
  • destructiveHint: If true, then the tool can perform destructive actions. If false, then the tool can only perform additive actions. Default: true.
  • idempotentHint: If true, then calling the tool repeatedly with the same arguments will have no additional effect on its environment. Default: false.
  • openWorldHint: If true, then the tool can interact with an 'open world' of external entities. If false, then the tool can only interact with internal entities. For example, a web search tool would be open world, while a memory tool would not be open world.

Destructive Hint: ❌ | Idempotent Hint: ❌ | Read Only Hint: ❌ | Open World Hint: ❌

Authorization Scopes

Requires one of the following OAuth scopes:

  • https://www.googleapis.com/auth/classroom.announcements