Skip to main content
Glama
cappyeo

discord-mcp

templates_modify

Idempotent

Update a Discord Guild Template's name or description while preserving its snapshot. Requires MANAGE_GUILD permission.

Instructions

Purpose: Update a Guild Template name and/or description without changing its snapshot.

Requires: Discord MANAGE_GUILD permission. Use templates_sync when the source guild layout changed.

Returns: {template, untrusted_text}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoReplacement template name
guild_idYesGuild that owns the template
descriptionNoReplacement description; null clears it
audit_reasonNoReason recorded in Discord audit log
template_codeYesGuild Template code to edit

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.28.0
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "$schema": "https://json-schema.org/draft/2020-12/schema",
      -    "additionalProperties": {},
      -    "properties": {
      -      "template": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "maxLength": 100,
      -            "minLength": 1,
      -            "pattern": "^[a-zA-Z0-9_-]+$",
      -            "type": "string"
      -          },
      -          "created_at": {
      -            "type": "string"
      -          },
      -          "creator_id": {
      -            "description": "Discord user ID",
      -            "pattern": "^\\d{17,20}$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "is_dirty": {
      -            "anyOf": [
      -              {
      -                "type": "boolean"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "source_guild_id": {
      -            "description": "Discord guild (server) ID",
      -            "pattern": "^\\d{17,20}$",
      -            "type": "string"
      -          },
      -          "updated_at": {
      -            "type": "string"
      -          },
      -          "usage_count": {
      -            "maximum": 9007199254740991,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "use_url": {
      -            "format": "uri",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "name",
      -          "description",
      -          "usage_count",
      -          "creator_id",
      -          "created_at",
      -          "updated_at",
      -          "source_guild_id",
      -          "is_dirty",
      -          "use_url"
      -        ],
      -        "type": "object"
      -      },
      -      "untrusted_text": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "template",
      -      "untrusted_text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "category": {
      -        "enum": [
      -          "client",
      -          "server"
      -        ],
      -        "type": "string"
      -      },
      -      "code": {
      -        "type": "string"
      -      },
      -      "recovery_hint": {
      -        "type": "string"
      -      },
      -      "retriable": {
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "retriable",
      -      "category",
      -      "recovery_hint"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "$schema": "https://json-schema.org/draft/2020-12/schema",
      +    "additionalProperties": {},
      +    "properties": {
      +      "template": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "maxLength": 100,
      +            "minLength": 1,
      +            "pattern": "^[a-zA-Z0-9_-]+$",
      +            "type": "string"
      +          },
      +          "created_at": {
      +            "type": "string"
      +          },
      +          "creator_id": {
      +            "description": "Discord user ID",
      +            "pattern": "^\\d{17,20}$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "is_dirty": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "source_guild_id": {
      +            "description": "Discord guild (server) ID",
      +            "pattern": "^\\d{17,20}$",
      +            "type": "string"
      +          },
      +          "updated_at": {
      +            "type": "string"
      +          },
      +          "usage_count": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "use_url": {
      +            "format": "uri",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "name",
      +          "description",
      +          "usage_count",
      +          "creator_id",
      +          "created_at",
      +          "updated_at",
      +          "source_guild_id",
      +          "is_dirty",
      +          "use_url"
      +        ],
      +        "type": "object"
      +      },
      +      "untrusted_text": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "template",
      +      "untrusted_text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "category": {
      +        "enum": [
      +          "client",
      +          "server"
      +        ],
      +        "type": "string"
      +      },
      +      "code": {
      +        "type": "string"
      +      },
      +      "recovery_hint": {
      +        "type": "string"
      +      },
      +      "retriable": {
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "retriable",
      +      "category",
      +      "recovery_hint"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observedv0.22.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish non-read-only, idempotent, non-destructive behavior. The description adds value beyond that by disclosing the snapshot-preservation guarantee and the permission requirement. It does not contradict any annotation, though it could further clarify partial-update semantics when a field is omitted.

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 compact labeled lines (Purpose, Requires, Returns) with zero filler. The most decision-relevant information — purpose and the routing to templates_sync — is front-loaded, and the return shape is stated in one short line.

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?

With an output schema present and rich annotations covering idempotency and non-destructiveness, the description covers the remaining essentials: what it does, the required permission, the alternative tool, and the snapshot behavior. This is complete for an agent to invoke it correctly; only minor details like audit_reason policy are left to the schema.

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%, so the input schema fully documents all five parameters. The description adds the relationship between the params (name/description are updated while the snapshot stays intact) but no per-parameter syntax details. Baseline 3 is appropriate with full schema coverage.

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?

The description states a specific verb ('Update'), resource ('Guild Template'), and scoped fields ('name and/or description'), plus the key distinguishing constraint ('without changing its snapshot'). This clearly separates it from templates_sync, templates_create, and templates_delete without requiring schema inspection.

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 names the required MANAGE_GUILD permission as a prerequisite and gives an explicit routing rule: 'Use templates_sync when the source guild layout changed.' This tells the agent both when to use this tool and when to use the alternative, leaving nothing to inference.

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