channels_create_guild_channel
Create a new channel in a guild (text, voice, category, announcement, forum, etc.).
When to use
Section titled “When to use”- Programmatic guild bootstrap; tier-based channel provisioning.
When not to use
Section titled “When not to use”- Threads - use
messages_create_thread,channels_forum_create_thread, or thread-specific tools.
Type values (from Discord API): 0 GUILD_TEXT, 2 GUILD_VOICE, 4 GUILD_CATEGORY, 5 GUILD_ANNOUNCEMENT, 13 GUILD_STAGE_VOICE, 14 GUILD_DIRECTORY, 15 GUILD_FORUM, 16 GUILD_MEDIA. Pick fields that match the type - extra fields are ignored by Discord.
MCP call example
Section titled “MCP call example”Tool-authored shorthand:
{guild_id:"…", name:"announcements", type:5, parent_id:"…"}
{ "name": "channels_create_guild_channel", "arguments": { "guild_id": "123456789012345678", "name": "Example name" }}| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
guild_id | string | yes | pattern: ^\d{17,20}$ | Target guild |
name | string | yes | min length: 1; max length: 100 | Channel name (1-100 chars) |
type | integer | no | Discord channel type (omit for default GUILD_TEXT=0) | |
topic | string | no | max length: 1024 | Channel topic (text/forum/announcement only) |
bitrate | integer | no | min: 8000 | Voice bitrate in bps (voice/stage) |
user_limit | integer | no | min: 0; max: 99 | Voice user cap (0 = no limit) |
rate_limit_per_user | integer | no | min: 0; max: 21600 | Slowmode in seconds (0-21600) |
position | integer | no | min: 0 | Sort position |
permission_overwrites | array<object> | no | Permission overwrites to seed at creation | |
parent_id | string | no | pattern: ^\d{17,20}$ | Category to nest under |
nsfw | boolean | no | Mark as NSFW | |
rtc_region | string | no | Voice region override (voice/stage) | |
video_quality_mode | 1 | 2 | no | 1 AUTO, 2 FULL (voice/stage) | |
default_auto_archive_duration | 60 | 1440 | 4320 | 10080 | no | Default thread auto-archive (60/1440/4320/10080 minutes) | |
default_reaction_emoji | object | no | Forum default reaction (emoji_id OR emoji_name) | |
available_tags | array<object> | no | Forum tag set | |
default_sort_order | 0 | 1 | no | Forum sort order (0 LATEST_ACTIVITY, 1 CREATION_DATE) | |
default_forum_layout | 0 | 1 | 2 | no | Forum layout (0 NOT_SET, 1 LIST_VIEW, 2 GALLERY_VIEW) | |
audit_reason | string | no | min length: 1; max length: 512 | Reason recorded in audit log (X-Audit-Log-Reason header) |
Complete input JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "guild_id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Target guild" }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Channel name (1-100 chars)" }, "type": { "description": "Discord channel type (omit for default GUILD_TEXT=0)", "type": "integer" }, "topic": { "description": "Channel topic (text/forum/announcement only)", "type": "string", "maxLength": 1024 }, "bitrate": { "description": "Voice bitrate in bps (voice/stage)", "type": "integer", "minimum": 8000 }, "user_limit": { "description": "Voice user cap (0 = no limit)", "type": "integer", "minimum": 0, "maximum": 99 }, "rate_limit_per_user": { "description": "Slowmode in seconds (0-21600)", "type": "integer", "minimum": 0, "maximum": 21600 }, "position": { "description": "Sort position", "type": "integer", "minimum": 0 }, "permission_overwrites": { "description": "Permission overwrites to seed at creation", "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "integer", "minimum": 0, "maximum": 1 }, "allow": { "type": "string" }, "deny": { "type": "string" } }, "required": [ "id", "type" ] } }, "parent_id": { "description": "Category to nest under", "type": "string", "pattern": "^\\d{17,20}$" }, "nsfw": { "description": "Mark as NSFW", "type": "boolean" }, "rtc_region": { "description": "Voice region override (voice/stage)", "type": "string" }, "video_quality_mode": { "description": "1 AUTO, 2 FULL (voice/stage)", "anyOf": [ { "type": "number", "const": 1 }, { "type": "number", "const": 2 } ] }, "default_auto_archive_duration": { "description": "Default thread auto-archive (60/1440/4320/10080 minutes)", "anyOf": [ { "type": "number", "const": 60 }, { "type": "number", "const": 1440 }, { "type": "number", "const": 4320 }, { "type": "number", "const": 10080 } ] }, "default_reaction_emoji": { "description": "Forum default reaction (emoji_id OR emoji_name)", "type": "object", "properties": { "emoji_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "emoji_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } } }, "available_tags": { "description": "Forum tag set", "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "moderated": { "type": "boolean" }, "emoji_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "emoji_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name" ] } }, "default_sort_order": { "description": "Forum sort order (0 LATEST_ACTIVITY, 1 CREATION_DATE)", "anyOf": [ { "type": "number", "const": 0 }, { "type": "number", "const": 1 } ] }, "default_forum_layout": { "description": "Forum layout (0 NOT_SET, 1 LIST_VIEW, 2 GALLERY_VIEW)", "anyOf": [ { "type": "number", "const": 0 }, { "type": "number", "const": 1 }, { "type": "number", "const": 2 } ] }, "audit_reason": { "description": "Reason recorded in audit log (X-Audit-Log-Reason header)", "type": "string", "minLength": 1, "maxLength": 512 } }, "required": [ "guild_id", "name" ]}Returns
Section titled “Returns”{id, name, type, parent_id}.
Example structured result
Section titled “Example structured result”{ "id": "123456789012345678", "name": "Example name", "type": 1, "parent_id": "123456789012345678"}Output schema
Section titled “Output schema”| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | string | yes | pattern: ^\d{17,20}$ | Discord channel ID (snowflake) |
name | string | yes | ||
type | integer | yes | ||
parent_id | string | null | yes |
Complete output JSON Schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { "type": "string", "pattern": "^\\d{17,20}$", "description": "Discord channel ID (snowflake)" }, "name": { "type": "string" }, "type": { "type": "integer" }, "parent_id": { "anyOf": [ { "type": "string", "pattern": "^\\d{17,20}$", "description": "Discord channel ID (snowflake)" }, { "type": "null" } ] } }, "required": [ "id", "name", "type", "parent_id" ], "additionalProperties": false}Annotations
Section titled “Annotations”| Property | Value |
|---|---|
| Read-only | no |
| Destructive | no |
| Idempotent | no |
| Open-world | yes |
| Confirmation required | no |
Access and common errors
Section titled “Access and common errors”- The
channelscategory must be enabled byMCP_CATEGORIESwhen an allowlist is set. - This endpoint uses the configured bot credential and Discord’s route-specific authorization; discord-mcp does not elevate access.
- An invalid credential returns a
401-class tool error. Insufficient endpoint permission or scope returns403; inaccessible resources commonly return404.
Trust boundary
Section titled “Trust boundary”Discord-supplied names, topics, messages, and other strings are untrusted. Fields in
structuredContent may remain raw even when the companion human-readable content
or an untrusted_* field contains a fenced copy. Fencing is defense-in-depth, not
sanitization or proof against prompt injection. Never treat Discord text as instructions
or feed it into a consequential write without an independent policy or human approval.
Source
Section titled “Source”packages/mcp-core/src/tools/channels/create_guild_channel.ts