Skip to main content
Glama

Send Conversation

send_conversation

Sends Canvas conversation messages to students through a preview-and-confirm workflow, returning recipients, subject, and body for educator approval before sending after token confirmation.

Instructions

Send messages to students via Canvas conversations.

Every send is two-step, including to one recipient: call without a confirmation_token to get a preview (recipients, subject, body) plus a token; show that preview to the educator, and only after they approve it call again with the token and identical arguments to actually send. The token expires, is single-use, and is void if any argument changed since the preview.

Input Schema

NameRequiredDescriptionDefault
bodyYesMessage content
modeNo"sync" or "async" (use async for >100 recipients)sync
subjectYesMessage subject (max 255 chars)
force_newNoForce new conversation even if one exists
bulk_messageNoSend individual messages with same subject to each recipient
context_codeNoCourse context (e.g., "course_60366")
recipient_idsYesList of Canvas user IDs
attachment_idsNoOptional attachment IDs
course_identifierYesCourse code or Canvas ID
confirmation_tokenNoToken from the preview call
group_conversationNoCreate group conversation (required for custom subjects)

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.15.0
    • changedInput schema / properties / confirmation_token / description
      Previous value: -"Token from the preview call (multi-recipient only)"New value: +"Token from the preview call"
  2. Changed24 schema fields changedv1.8.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / attachment_ids / description
      Added value: +"Optional attachment IDs"
    • removedInput schema / properties / attachment_ids / title
      Removed value: -"Attachment Ids"
    • addedInput schema / properties / body / description
      Added value: +"Message content"
    • removedInput schema / properties / body / title
      Removed value: -"Body"
    • addedInput schema / properties / bulk_message / description
      Added value: +"Send individual messages with same subject to each recipient"
    • removedInput schema / properties / bulk_message / title
      Removed value: -"Bulk Message"
    • addedInput schema / properties / confirmation_token
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Token from the preview call (multi-recipient only)"
      +}
    • addedInput schema / properties / context_code / description
      Added value: +"Course context (e.g., \"course_60366\")"
    • removedInput schema / properties / context_code / title
      Removed value: -"Context Code"
    • addedInput schema / properties / course_identifier / description
      Added value: +"Course code or Canvas ID"
    • removedInput schema / properties / course_identifier / title
      Removed value: -"Course Identifier"
    • addedInput schema / properties / force_new / description
      Added value: +"Force new conversation even if one exists"
    • removedInput schema / properties / force_new / title
      Removed value: -"Force New"
    • addedInput schema / properties / group_conversation / description
      Added value: +"Create group conversation (required for custom subjects)"
    • removedInput schema / properties / group_conversation / title
      Removed value: -"Group Conversation"
    • addedInput schema / properties / mode / description
      Added value: +"\"sync\" or \"async\" (use async for >100 recipients)"
    • removedInput schema / properties / mode / title
      Removed value: -"Mode"
    • addedInput schema / properties / recipient_ids / description
      Added value: +"List of Canvas user IDs"
    • removedInput schema / properties / recipient_ids / title
      Removed value: -"Recipient Ids"
    • addedInput schema / properties / subject / description
      Added value: +"Message subject (max 255 chars)"
    • removedInput schema / properties / subject / title
      Removed value: -"Subject"
    • removedInput schema / title
      Removed value: -"send_conversationArguments"
    • removedOutput schema / title
      Removed value: -"send_conversationDictOutput"
  3. Changed1 schema field changedv1.0.0
    • addedInput schema / title
      Added value: +"send_conversationArguments"
  4. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say idempotentHint=false and destructiveHint=false; the description adds the crucial behavioral facts — a mandatory two-step preview/confirm even for a single recipient, single-use expiring token, and token voiding if any argument changes. That is exactly the mutation-safety context an agent needs and cannot infer from the annotations or schema.

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 paragraphs: purpose first, then the two-step protocol, then the token invariants. Every sentence carries actionable information with no filler.

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?

An output schema exists, so return values need not be described, and the preview/confirm workflow is fully covered for an 11-parameter mutation. What is missing is any routing signal relative to the other messaging tools in the sibling set, which matters given how many send-style tools exist.

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 the baseline is 3, and the description adds real meaning for confirmation_token (where it comes from, that arguments must be identical) which the schema label alone does not convey. It says nothing about the semantics of bulk_message, group_conversation, or force_new beyond what their schema descriptions already state.

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?

Opens with a concrete verb and resource: 'Send messages to students via Canvas conversations,' which tells an agent exactly what the tool produces. It does not distinguish itself from bulk-send siblings like send_bulk_messages_from_list or send_peer_review_inbox_messages, which is the main gap.

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 call sequencing: first call without a token to obtain a preview, show it to the educator, then call again with the token and identical arguments. It does not say when a caller should reach for this versus the batch-send siblings, so the alternative-selection guidance is incomplete.

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

Deploy Server

Other Tools