Skip to main content
Glama
cappyeo

discord-mcp

app_emojis_create

Create a custom emoji for your Discord bot application, usable across servers without a guild. Pass a base64 image (JPEG, PNG, GIF, WEBP, AVIF; ≤256 KiB) and a name (2-32 chars).

Instructions

Purpose: Upload a new application-scoped custom emoji (applications can own up to 2,000).

When to use:

  • Register an emoji available wherever the bot is - independent of guild.

  • Omit application_id to register it on the authenticated bot application.

When NOT to use:

  • Guild-only emoji → use emojis_create.

Upload requirements: JPEG, PNG, GIF, WEBP, or AVIF; decoded image ≤ 256 KiB; 128×128 is recommended; name is 2-32 ASCII letters, digits, or underscores.

Example: {name:"spark", image:"data:image/png;base64,…"} (application_id is optional for the current bot)

Returns: {id, name, animated}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesEmoji name (2-32 ASCII letters, digits, or underscores)
imageYesEmoji image as a JPEG, PNG, GIF, WEBP, or AVIF base64 data URI (max 256 KiB decoded)
application_idNoApplication to attach the emoji to (omit to use the authenticated bot application)

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": {
      -      "animated": {
      -        "type": "boolean"
      -      },
      -      "id": {
      -        "anyOf": [
      -          {
      -            "description": "Discord custom emoji ID",
      -            "pattern": "^\\d{17,20}$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "name": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "name",
      -      "animated"
      -    ],
      -    "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": {
      +      "animated": {
      +        "type": "boolean"
      +      },
      +      "id": {
      +        "anyOf": [
      +          {
      +            "description": "Discord custom emoji ID",
      +            "pattern": "^\\d{17,20}$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "name": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "name",
      +      "animated"
      +    ],
      +    "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. Changed6 schema fields changedv0.26.0
    • changedInput schema / properties / application_id / description
      Previous value: -"Application to attach the emoji to"New value: +"Application to attach the emoji to (omit to use the authenticated bot application)"
    • changedInput schema / properties / image / description
      Previous value: -"Emoji image as a base64 data URI (e.g. \"data:image/png;base64,…\")"New value: +"Emoji image as a JPEG, PNG, GIF, WEBP, or AVIF base64 data URI (max 256 KiB decoded)"
    • addedInput schema / properties / image / pattern
      Added value: +"^data:image\\/(jpeg|png|gif|webp|avif);base64,([A-Za-z0-9+/=]+)$"
    • changedInput schema / properties / name / description
      Previous value: -"Emoji name (2-32 chars)"New value: +"Emoji name (2-32 ASCII letters, digits, or underscores)"
    • addedInput schema / properties / name / pattern
      Added value: +"^[A-Za-z0-9_]{2,32}$"
    • changedInput schema / required
      Previous value: -[
      -  "application_id",
      -  "name",
      -  "image"
      -]New value: +[
      +  "name",
      +  "image"
      +]
  3. First observedv0.22.0

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false (write), idempotentHint=false, destructiveHint=false. The description adds valuable context: upload requirements (file types, size, name pattern), the 2,000-emoji quota, and the optional `application_id` behavior. It also mentions the return format, which is partially covered by the output schema. This goes beyond the annotations without contradicting them.

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?

The description is well-structured with clear headings (Purpose, When to use, When NOT to use, Upload requirements, Example, Returns). Each section is purposeful and adds value. It is slightly long but not verbose; every sentence contributes to effective usage.

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 create operation with 3 parameters and an output schema, the description covers usage guidelines, constraints, alternatives, and return expectations. It does not mention rate limits or auth, but these are not typically expected in tool descriptions and are not critical for selection. The description is sufficiently complete for an agent to invoke it correctly.

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 description coverage is 100%, so all parameters are documented. The description adds marginal value: it clarifies that `application_id` is optional for the current bot and provides an example payload. While the schema already covers validation rules, the example and explicit optionality note enhance understanding beyond the schema.

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 clearly states the action ('Upload a new application-scoped custom emoji') and the specific scope (application-scoped), with a distinct resource. It also distinguishes from the sibling tool `emojis_create` for guild-scoped emojis. The verb 'Upload' is specific and unambiguous, and the scope is explicit, making it easy for an agent to differentiate.

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?

The description provides explicit 'When to use' and 'When NOT to use' sections, naming the alternative `emojis_create` for guild-only emojis. It also gives clear conditions for omitting `application_id`. This leaves no ambiguity about when to select this tool over siblings.

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