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 ( |
| Fields | |
|---|---|
courseId |
Required. Identifier of the course. |
text |
Required. Text of the announcement. |
materials[] |
Optional. Materials to attach. At most 20. |
assigneeIds[] |
Optional. Identifiers of the students who can see the announcement, from get_course_roster. Empty means all students. |
scheduleDate |
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 |
Required. The user's IANA timezone (e.g. |
MaterialInput
| JSON representation |
|---|
{ "driveFile": { object ( |
| Fields | |
|---|---|
Union field content. The attachment content. content can be only one of the following: |
|
driveFile |
Google Drive file to attach. |
youtubeVideoId |
Identifier of the YouTube video to attach (e.g. |
linkUrl |
URL of the web page to attach. |
formUrl |
URL of the Google Form to attach. |
notebook |
Gemini Notebook to attach. |
DriveFileInput
| JSON representation |
|---|
{
"id": string,
"shareMode": enum ( |
| Fields | |
|---|---|
id |
Required. Identifier of the Drive file. |
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 |
Required. Identifier of the Notebook. |
title |
Title of the Notebook. |
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 ( |
| Fields | |
|---|---|
id |
Output only. Identifier. Announcement ID. |
materials[] |
Materials attached to this announcement. |
assigneeIds[] |
List of student IDs this announcement is visible to (unset means all students). |
publishDate |
Output only. Date the announcement was published (YYYY-MM-DD). |
state |
Output only. State of the announcement. |
text |
Text of the announcement. |
scheduleDate |
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 ( |
| Fields | |
|---|---|
id |
Output only. Identifier of the material. Use it to remove the material with |
Union field content. The attachment content. content can be only one of the following: |
|
sharedDriveFile |
Google Drive file attachment. |
youtubeVideo |
YouTube video attachment. |
link |
URL link attachment. |
form |
Google Forms attachment. |
notebook |
Gemini Notebook attachment. |
| JSON representation |
|---|
{ "file": { object ( |
| Fields | |
|---|---|
file |
Drive file details. |
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 |
Required. Identifier of the Drive file. |
title |
Output only. Title of the Drive file. |
url |
Output only. URL of the Drive file. |
YouTubeVideo
| JSON representation |
|---|
{ "id": string, "title": string } |
| Fields | |
|---|---|
id |
Required. YouTube video ID. |
title |
Output only. Title of the YouTube video. |
Link
| JSON representation |
|---|
{ "url": string, "title": string } |
| Fields | |
|---|---|
url |
Required. URL of the link. |
title |
Output only. Title of the link. |
Form
| JSON representation |
|---|
{ "formUrl": string, "title": string, "responseUrl": string } |
| Fields | |
|---|---|
formUrl |
Required. URL of the form. |
title |
Output only. Title of the form. |
responseUrl |
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 |
Required. Identifier of the Notebook. |
title |
Title of the Notebook. |
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