Skip to main content
Glama

Create Event

calendar_create_event

Schedule a Microsoft 365 calendar event with subject, start, and end times. Invite attendees to trigger Outlook invitations or keep it private.

Instructions

Add an event to your calendar. With attendees, Outlook emails them an invitation, so confirm=true is then required. Without attendees it is a private appointment and needs no confirmation. Returns the event.

Input Schema

NameRequiredDescriptionDefault
endYesRFC 3339 date-time with offset, e.g. 2026-10-01T09:00:00+09:30.
bodyNoDescription.
startYesRFC 3339 date-time with offset, e.g. 2026-10-01T09:00:00+09:30.
confirmNoMust be true to send invitations to the attendees; set only after the user approves.
show_asNoHow the time shows in your calendar.
subjectYesTitle.
locationNoLocation text.
attendeesNoPeople to invite.
time_zoneNoIANA time-zone name, e.g. Australia/Adelaide. Defaults to the mailbox time zone.
account_idNoAccount ID or email address. Omit when only one account is signed in.
is_all_dayNoAll-day event (start and end at midnight in time_zone).
body_formatNoFormat of the body text you supply.text
calendar_idNoCalendar ID (default: your default calendar).
reminder_minutesNoReminder before start, in minutes.

Output Schema

NameRequiredDescriptionDefault
eventYes
summaryYesOne-line human summary. The tool's text content is this result serialized as JSON (summary included), so a client that ignores structuredContent still sees every field.
invitations_sentYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed43 schema fields changedv1.0.0
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / account_id / description
      Added value: +"Account ID or email address. Omit when only one account is signed in."
    • addedInput schema / properties / account_id / maxLength
      Added value: +320
    • addedInput schema / properties / account_id / minLength
      Added value: +1
    • removedInput schema / properties / attendees / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / attendees / default
      Removed value: -null
    • addedInput schema / properties / attendees / description
      Added value: +"People to invite."
    • addedInput schema / properties / attendees / items
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Meeting attendee.",
      +  "properties": {
      +    "address": {
      +      "description": "Email address, e.g. jane@example.com.",
      +      "format": "email",
      +      "maxLength": 320,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "Display name.",
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    "type": {
      +      "default": "required",
      +      "description": "Attendance type.",
      +      "enum": [
      +        "required",
      +        "optional"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "address"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / attendees / maxItems
      Added value: +500
    • addedInput schema / properties / attendees / type
      Added value: +"array"
    • removedInput schema / properties / body / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / body / default
      Removed value: -null
    • addedInput schema / properties / body / description
      Added value: +"Description."
    • addedInput schema / properties / body / maxLength
      Added value: +100000
    • addedInput schema / properties / body / type
      Added value: +"string"
    • addedInput schema / properties / body_format
      Added value: +{
      +  "default": "text",
      +  "description": "Format of the body text you supply.",
      +  "enum": [
      +    "text",
      +    "html"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / calendar_id
      Added value: +{
      +  "description": "Calendar ID (default: your default calendar).",
      +  "maxLength": 1024,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / confirm
      Added value: +{
      +  "default": false,
      +  "description": "Must be true to send invitations to the attendees; set only after the user approves.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / end / description
      Added value: +"RFC 3339 date-time with offset, e.g. 2026-10-01T09:00:00+09:30."
    • addedInput schema / properties / end / format
      Added value: +"date-time"
    • addedInput schema / properties / is_all_day
      Added value: +{
      +  "description": "All-day event (start and end at midnight in time_zone).",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / location / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / location / default
      Removed value: -null
    • addedInput schema / properties / location / description
      Added value: +"Location text."
    • addedInput schema / properties / location / maxLength
      Added value: +255
    • addedInput schema / properties / location / type
      Added value: +"string"
    • addedInput schema / properties / reminder_minutes
      Added value: +{
      +  "description": "Reminder before start, in minutes.",
      +  "maximum": 40320,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / show_as
      Added value: +{
      +  "description": "How the time shows in your calendar.",
      +  "enum": [
      +    "free",
      +    "tentative",
      +    "busy",
      +    "oof",
      +    "workingElsewhere"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / start / description
      Added value: +"RFC 3339 date-time with offset, e.g. 2026-10-01T09:00:00+09:30."
    • addedInput schema / properties / start / format
      Added value: +"date-time"
    • addedInput schema / properties / subject / description
      Added value: +"Title."
    • addedInput schema / properties / subject / maxLength
      Added value: +255
    • addedInput schema / properties / subject / minLength
      Added value: +1
    • addedInput schema / properties / time_zone
      Added value: +{
      +  "description": "IANA time-zone name, e.g. Australia/Adelaide. Defaults to the mailbox time zone.",
      +  "maxLength": 64,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • removedInput schema / properties / timezone
      Removed value: -{
      -  "default": "UTC",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "account_id",
      -  "subject",
      -  "start",
      -  "end"
      -]New value: +[
      +  "subject",
      +  "start",
      +  "end"
      +]
    • addedOutput schema / $defs
      Added value: +{
      +  "attendee": {
      +    "additionalProperties": false,
      +    "description": "Event attendee and their response.",
      +    "properties": {
      +      "address": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "response": {
      +        "enum": [
      +          "none",
      +          "organizer",
      +          "tentativelyAccepted",
      +          "accepted",
      +          "declined",
      +          "notResponded"
      +        ]
      +      },
      +      "type": {
      +        "enum": [
      +          "required",
      +          "optional",
      +          "resource"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "address",
      +      "type",
      +      "response"
      +    ],
      +    "type": "object"
      +  },
      +  "event_detail": {
      +    "additionalProperties": false,
      +    "description": "Event from m365_get. recurrence is a read-only human summary.",
      +    "properties": {
      +      "attendee_count": {
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "attendees": {
      +        "items": {
      +          "$ref": "#/$defs/attendee"
      +        },
      +        "type": "array"
      +      },
      +      "body": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "body_truncated": {
      +        "type": "boolean"
      +      },
      +      "calendar_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "end": {
      +        "format": "date-time",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "is_all_day": {
      +        "type": "boolean"
      +      },
      +      "is_organizer": {
      +        "type": "boolean"
      +      },
      +      "location": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "my_response": {
      +        "enum": [
      +          "none",
      +          "organizer",
      +          "tentativelyAccepted",
      +          "accepted",
      +          "declined",
      +          "notResponded"
      +        ]
      +      },
      +      "organizer": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/recipient"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "preview": {
      +        "anyOf": [
      +          {
      +            "maxLength": 255,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "recurrence": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "show_as": {
      +        "enum": [
      +          "free",
      +          "tentative",
      +          "busy",
      +          "oof",
      +          "workingElsewhere",
      +          "unknown"
      +        ]
      +      },
      +      "start": {
      +        "format": "date-time",
      +        "type": "string"
      +      },
      +      "subject": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "time_zone": {
      +        "type": "string"
      +      },
      +      "web_link": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "subject",
      +      "start",
      +      "end",
      +      "time_zone",
      +      "is_all_day",
      +      "location",
      +      "organizer",
      +      "is_organizer",
      +      "my_response",
      +      "show_as",
      +      "attendee_count",
      +      "calendar_id",
      +      "preview",
      +      "body",
      +      "body_truncated",
      +      "attendees",
      +      "web_link",
      +      "recurrence"
      +    ],
      +    "type": "object"
      +  },
      +  "recipient": {
      +    "additionalProperties": false,
      +    "description": "A person's name and address.",
      +    "properties": {
      +      "address": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "address"
      +    ],
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / additionalProperties
      Previous value: -trueNew value: +false
    • addedOutput schema / description
      Added value: +"The created event."
    • addedOutput schema / properties
      Added value: +{
      +  "event": {
      +    "$ref": "#/$defs/event_detail"
      +  },
      +  "invitations_sent": {
      +    "type": "boolean"
      +  },
      +  "summary": {
      +    "description": "One-line human summary. The tool's text content is this result serialized as JSON (summary included), so a client that ignores structuredContent still sees every field.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "event",
      +  "invitations_sent",
      +  "summary"
      +]
  2. First observedv0.2.3

TDQS

A4/5.0
Behavior4/5

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

Annotations flag a non-read-only, open-world operation but say nothing about the external email side effect. The description adds that invitations are emailed to attendees through Outlook, which is exactly the kind of consequence an agent must warn the user about. The confirm-after-approval safety gate is a useful restatement, though it partially duplicates the schema's own confirm description.

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, zero waste, and the most important behavioral fact (invitations get emailed when attendees exist) is front-loaded right after the purpose. Every sentence carries information an agent needs.

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 14-parameter creation tool, the description covers the essential decision (attendees → confirm required) and an output schema exists so return values need no explanation. It is adequately complete, though it says nothing about defaults for account_id/calendar_id or idempotency behavior implied by idempotentHint=false.

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

Parameters3/5

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

Schema description coverage is 100%, with all 14 parameters including enums and nested attendee fields documented in the schema itself. The description's only parameter-related content is the attendees/confirm dependency, which the schema already encodes. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Add an event to your calendar.' An agent immediately knows this creates a calendar entry, and the create-vs-update distinction against calendar_update_event follows from the verb. However, no sibling tool is named, so the differentiation is implicit rather than stated.

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 clear conditional context: with attendees, an Outlook invitation is emailed and confirm=true becomes required; without attendees, it is a private appointment needing no confirmation. That is real workflow guidance. It stops short of stating when to prefer calendar_update_event or calendar_find_availability, so there is no explicit alternative routing.

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