Skip to main content
Glama

Create Calendar Event

create-event
Destructive

Schedule a new Outlook calendar event with subject, start/end times, optional attendees; use dry run to preview invites before saving.

Instructions

Create a new calendar event on the signed-in user's default calendar. Returns the created event with its id, webLink, and (if attendees are present) an auto-generated online-meeting URL — attendees receive invitations on save, so pass dryRun: true first to preview who would be invited (and how many are external) without creating anything. When OUTLOOK_ALLOWED_RECIPIENTS is set, every attendee must be allowed or nothing is created. Times use the configured timezone (default Australia/Melbourne; override with OUTLOOK_DEFAULT_TIMEZONE); omit the Z suffix to send local time. Use manage-event action=update to modify an event after creation, or manage-event action=cancel/delete to remove it. Real creates count against the session limit (OUTLOOK_MAX_CREATE_EVENT_PER_SESSION, else OUTLOOK_MAX_EMAILS_PER_SESSION); 0 refuses every create.

Input Schema

NameRequiredDescriptionDefault
endYesThe end time of the event in ISO 8601 format
bodyNoOptional body content for the event
startYesThe start time of the event in ISO 8601 format
dryRunNoPreview only: nothing is created and no invitations are sent. Shows who would be invited and how many are external (default false).
subjectYesThe subject of the event
attendeesNoAttendees: email address strings (required attendees) or {email, type} objects, where type is 'required', 'optional' or 'resource' (a room or equipment)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv3.14.1
    • changedInput schema / properties / attendees / description
      Previous value: -"List of attendee email addresses"New value: +"Attendees: email address strings (required attendees) or {email, type} objects, where type is 'required', 'optional' or 'resource' (a room or equipment)"
    • addedInput schema / properties / attendees / items / oneOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "email": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "enum": [
      +          "required",
      +          "optional",
      +          "resource"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "email"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / attendees / items / type
      Removed value: -"string"
    • addedInput schema / properties / dryRun
      Added value: +{
      +  "description": "Preview only: nothing is created and no invitations are sent. Shows who would be invited and how many are external (default false).",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changedv3.7.4
    • addedInput schema / additionalProperties
      Added value: +false
  3. First observedv3.4.1

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=true): discloses that attendees receive invitations on save, the OUTLOOK_ALLOWED_RECIPIENTS gating, timezone resolution rules, session-limit enforcement, and that 0 refuses every create. This is exactly the destructive/side-effect context an agent needs.

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 purpose and return value in the first sentence, then progressively adds side effects, alternatives, and limits. It is long and somewhat parenthetical, but nearly every clause carries decision-relevant information, so little is wasted.

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?

No output schema exists, yet the description names the returned fields (id, webLink, conditional online-meeting URL), covers the destructive side effects, the safe dryRun path, and the limit/timezone configuration. Completeness is high for a 6-parameter mutating tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real value the schema lacks: how timezone interacts with the start/end ISO strings ('omit the Z suffix to send local time') and the semantics of dryRun's preview output. It does not restate subject/body beyond what the schema already documents.

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 ('Create a new calendar event on the signed-in user's default calendar'), names the return payload, and implicitly contrasts with siblings like manage-event and list-events. An agent can distinguish this from every sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to alternatives: use manage-event action=update to modify, action=cancel/delete to remove. It also prescribes the dryRun:true preview workflow before committing, and warns that dryRun avoids wasting the session create limit.

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