Skip to main content
Glama
hanweg

mcp-discord

by hanweg

create_text_channel

Add a new text channel to a Discord server by specifying the server ID, channel name, optional category ID, and topic. Simplify server organization with this integration tool.

Instructions

Create a new text channel

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
category_idNoOptional category ID to place channel in
nameYesChannel name
server_idYesDiscord server ID
topicNoOptional channel topic

Implementation Reference

  • Executes the create_text_channel tool: fetches guild, optional category, creates Discord text channel with given name, optional topic and category, returns success message with channel ID.
    elif name == "create_text_channel":
        guild = await discord_client.fetch_guild(int(arguments["server_id"]))
        category = None
        if "category_id" in arguments:
            category = guild.get_channel(int(arguments["category_id"]))
        
        channel = await guild.create_text_channel(
            name=arguments["name"],
            category=category,
            topic=arguments.get("topic"),
            reason="Channel created via MCP"
        )
        
        return [TextContent(
            type="text",
            text=f"Created text channel #{channel.name} (ID: {channel.id})"
        )]
  • Defines the input schema and description for the create_text_channel tool, specifying required parameters server_id and name, optional category_id and topic.
    Tool(
        name="create_text_channel",
        description="Create a new text channel",
        inputSchema={
            "type": "object",
            "properties": {
                "server_id": {
                    "type": "string",
                    "description": "Discord server ID"
                },
                "name": {
                    "type": "string",
                    "description": "Channel name"
                },
                "category_id": {
                    "type": "string",
                    "description": "Optional category ID to place channel in"
                },
                "topic": {
                    "type": "string",
                    "description": "Optional channel topic"
                }
            },
            "required": ["server_id", "name"]
        }
    ),
  • Registers the create_text_channel tool (and others) by returning it from the @app.list_tools() handler.
    @app.list_tools()
    async def list_tools() -> List[Tool]:
        """List available Discord tools."""
        return [
            # Server Information Tools
            Tool(
                name="get_server_info",
                description="Get information about a Discord server",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server (guild) ID"
                        }
                    },
                    "required": ["server_id"]
                }
            ),
            Tool(
                name="get_channels",
                description="Get a list of all channels in a Discord server",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server (guild) ID"
                        }
                    },
                    "required": ["server_id"]
                }
            ),
            Tool(
                name="list_members",
                description="Get a list of members in a server",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server (guild) ID"
                        },
                        "limit": {
                            "type": "number",
                            "description": "Maximum number of members to fetch",
                            "minimum": 1,
                            "maximum": 1000
                        }
                    },
                    "required": ["server_id"]
                }
            ),
    
            # Role Management Tools
            Tool(
                name="add_role",
                description="Add a role to a user",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server ID"
                        },
                        "user_id": {
                            "type": "string",
                            "description": "User to add role to"
                        },
                        "role_id": {
                            "type": "string",
                            "description": "Role ID to add"
                        }
                    },
                    "required": ["server_id", "user_id", "role_id"]
                }
            ),
            Tool(
                name="remove_role",
                description="Remove a role from a user",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server ID"
                        },
                        "user_id": {
                            "type": "string",
                            "description": "User to remove role from"
                        },
                        "role_id": {
                            "type": "string",
                            "description": "Role ID to remove"
                        }
                    },
                    "required": ["server_id", "user_id", "role_id"]
                }
            ),
    
            # Channel Management Tools
            Tool(
                name="create_text_channel",
                description="Create a new text channel",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "server_id": {
                            "type": "string",
                            "description": "Discord server ID"
                        },
                        "name": {
                            "type": "string",
                            "description": "Channel name"
                        },
                        "category_id": {
                            "type": "string",
                            "description": "Optional category ID to place channel in"
                        },
                        "topic": {
                            "type": "string",
                            "description": "Optional channel topic"
                        }
                    },
                    "required": ["server_id", "name"]
                }
            ),
            Tool(
                name="delete_channel",
                description="Delete a channel",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "ID of channel to delete"
                        },
                        "reason": {
                            "type": "string",
                            "description": "Reason for deletion"
                        }
                    },
                    "required": ["channel_id"]
                }
            ),
    
            # Message Reaction Tools
            Tool(
                name="add_reaction",
                description="Add a reaction to a message",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Channel containing the message"
                        },
                        "message_id": {
                            "type": "string",
                            "description": "Message to react to"
                        },
                        "emoji": {
                            "type": "string",
                            "description": "Emoji to react with (Unicode or custom emoji ID)"
                        }
                    },
                    "required": ["channel_id", "message_id", "emoji"]
                }
            ),
            Tool(
                name="add_multiple_reactions",
                description="Add multiple reactions to a message",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Channel containing the message"
                        },
                        "message_id": {
                            "type": "string",
                            "description": "Message to react to"
                        },
                        "emojis": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "description": "Emoji to react with (Unicode or custom emoji ID)"
                            },
                            "description": "List of emojis to add as reactions"
                        }
                    },
                    "required": ["channel_id", "message_id", "emojis"]
                }
            ),
            Tool(
                name="remove_reaction",
                description="Remove a reaction from a message",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Channel containing the message"
                        },
                        "message_id": {
                            "type": "string",
                            "description": "Message to remove reaction from"
                        },
                        "emoji": {
                            "type": "string",
                            "description": "Emoji to remove (Unicode or custom emoji ID)"
                        }
                    },
                    "required": ["channel_id", "message_id", "emoji"]
                }
            ),
            Tool(
                name="send_message",
                description="Send a message to a specific channel",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Discord channel ID"
                        },
                        "content": {
                            "type": "string",
                            "description": "Message content"
                        }
                    },
                    "required": ["channel_id", "content"]
                }
            ),
            Tool(
                name="read_messages",
                description="Read recent messages from a channel",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Discord channel ID"
                        },
                        "limit": {
                            "type": "number",
                            "description": "Number of messages to fetch (max 100)",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    "required": ["channel_id"]
                }
            ),
            Tool(
                name="get_user_info",
                description="Get information about a Discord user",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "user_id": {
                            "type": "string",
                            "description": "Discord user ID"
                        }
                    },
                    "required": ["user_id"]
                }
            ),
            Tool(
                name="moderate_message",
                description="Delete a message and optionally timeout the user",
                inputSchema={
                    "type": "object",
                    "properties": {
                        "channel_id": {
                            "type": "string",
                            "description": "Channel ID containing the message"
                        },
                        "message_id": {
                            "type": "string",
                            "description": "ID of message to moderate"
                        },
                        "reason": {
                            "type": "string",
                            "description": "Reason for moderation"
                        },
                        "timeout_minutes": {
                            "type": "number",
                            "description": "Optional timeout duration in minutes",
                            "minimum": 0,
                            "maximum": 40320  # Max 4 weeks
                        }
                    },
                    "required": ["channel_id", "message_id", "reason"]
                }
            ),
            Tool(
                name="list_servers",
                description="Get a list of all Discord servers the bot has access to with their details such as name, id, member count, and creation date.",
                inputSchema={
                    "type": "object",
                    "properties": {},
                    "required": []
                }
            )
        ]
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral context. It states the tool creates something but doesn't disclose permissions required, rate limits, whether creation is reversible, what happens on duplicate names, or what the response contains. This leaves significant gaps for a mutation tool.

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?

The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a straightforward creation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after creation, error conditions, or behavioral aspects like permissions. Given the complexity of creating a Discord channel, more context is needed for safe and effective use.

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 all parameters are documented in the schema itself. The description adds no additional parameter information beyond what the schema provides, such as format examples or constraints. This meets the baseline for high schema coverage.

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?

The description clearly states the action ('create') and resource ('new text channel'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'delete_channel' or 'get_channels' beyond the obvious verb difference, nor does it specify platform context beyond what's implied by the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing server permissions), when not to use it (e.g., for voice channels), or relationships with sibling tools like 'get_channels' for checking existing channels first.

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

Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hanweg/mcp-discord'

If you have feedback or need assistance with the MCP directory API, please join our Discord server