Version
DESTRUCTIVE

create_canned_reply

Save a reusable support reply on a project, with an optional slash-command shortcut and picker position.

Add a snippet to a project's saved replies. It appears in the thread composer's picker straight away, and a creator can pull it in by typing its shortcut. The text is validated against the same rules the dashboard form applies, so a snippet accepted here renders in the composer exactly as one saved from the inbox.

Synchronous — the new row is returned, and support.canned_reply.created emits once.

Not idempotent

Two calls with the same title and body save two snippets. Only shortcut is unique within a project, so a snippet without one can be duplicated freely. Check list_canned_replies before creating.

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Delivered to every endpoint subscribed to it once the change is made.

Annotations

DestructiveOpen world

A client that honours annotations asks a person before running it. It reaches beyond Subscriby: a connector, a provider or a member.

Arguments

project_id*string

UUID of the project the snippet belongs to.

title*string

Short label shown in the picker, 2 to 80 characters.

body*string

The reply text, 2 to 4000 characters.

shortcutstringoptional

Slash-command a creator types to insert the snippet: letters, numbers, dashes and underscores, up to 30 characters, unique within the project.

sort_orderintegeroptional

Position in the picker, 0 to 999. Defaults to 0.

min0max999

What it returns

{  "data": {    "id": "5d2f8a71-3c9e-4b06-a8f4-1e7c9d2b6a35",    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "title": "Refund policy",    "body": "Refunds are available within 14 days of your first payment. Reply here with the email you paid with and we'll sort it.",    "shortcut": "refund",    "sort_order": 0,    "created_at": "2026-09-06T10:05:00+00:00",    "updated_at": "2026-09-06T10:05:00+00:00"  }}

title comes back trimmed. body is stored as sent, whitespace included, because it reaches members verbatim. An omitted or empty shortcut is stored as null.

How it fails

VALIDATION_FAILED

title outside 2–80 characters, body outside 2–4000, shortcut longer than 30 characters, containing anything but letters, numbers, dashes and underscores, or already used by another snippet in this project, or sort_order outside 0–999. The envelope names the offending field. Also returned when the token's owner is on the project's team but their role lacks the support permission on it.

RESOURCE_NOT_FOUND

project_id names a project the token cannot see: unknown, another team's, or outside the token's scope:project: allow-list.

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks support-canned-reply:create.

How is this guide?

Last updated on