Skip to main content
Glama

create_role

Create a new role in a Discord server to organize members, assign permissions, and customize color and display options.

Instructions

Create a new role in the specified server.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
server_idNo
colorNo
colourNo
hoistNo
mentionableNo
permissionsNo
permissions_valueNo
unicode_emojiNo
reasonNo

Implementation Reference

  • The handler function that implements the core logic for the 'create_role' tool. It fetches the guild, constructs parameters from input arguments (using helper functions for color and permissions), calls Discord's create_role API, adjusts position if needed, and returns a success message.
    async def handle_create_role(discord_client, arguments: Dict[str, Any]) -> List[TextContent]: """Create a new role""" guild = await discord_client.fetch_guild(int(arguments["server_id"])) kwargs = { "name": arguments["name"], "reason": arguments.get("reason", "Role created via MCP") } if "color" in arguments: kwargs["color"] = hex_to_color(arguments["color"]) if "permissions" in arguments: kwargs["permissions"] = parse_permissions(arguments["permissions"]) if "hoist" in arguments: kwargs["hoist"] = arguments["hoist"] if "mentionable" in arguments: kwargs["mentionable"] = arguments["mentionable"] role = await guild.create_role(**kwargs) # Handle position after creation if "position" in arguments: await role.edit(position=arguments["position"]) return [TextContent( type="text", text=f"Created role '{role.name}' (ID: {role.id}) in {guild.name}" )]
  • Registers the 'create_role' tool with the MCP server in the list_tools() function, defining its name, description, and input schema for validation.
    Tool( name="create_role", description="Create a new role with detailed permissions and appearance", inputSchema={ "type": "object", "properties": { "server_id": {"type": "string", "description": "Server ID"}, "name": {"type": "string", "description": "Role name"}, "color": {"type": "string", "description": "Role color (hex code like #ff0000)"}, "permissions": {"type": "array", "items": {"type": "string"}, "description": "List of permissions"}, "hoist": {"type": "boolean", "description": "Whether role is displayed separately"}, "mentionable": {"type": "boolean", "description": "Whether role is mentionable"}, "position": {"type": "number", "description": "Role position in hierarchy"}, "reason": {"type": "string", "description": "Reason for creation"} }, "required": ["server_id", "name"] } ),
  • Utility function that parses a list of permission names from tool arguments into a discord.Permissions object, mapping common names to discord.py attributes. Used in the create_role handler for setting role permissions.
    def parse_permissions(permission_list: List[str]) -> discord.Permissions: """Convert list of permission strings to discord.Permissions object""" if not permission_list: return discord.Permissions.none() permissions = discord.Permissions.none() # Map common permission names to discord.py attributes permission_mapping = { "administrator": "administrator", "admin": "administrator", "manage_server": "manage_guild", "manage_guild": "manage_guild", "manage_channels": "manage_channels", "manage_roles": "manage_roles", "manage_messages": "manage_messages", "manage_webhooks": "manage_webhooks", "manage_emojis": "manage_emojis_and_stickers", "manage_emojis_and_stickers": "manage_emojis_and_stickers", "kick_members": "kick_members", "ban_members": "ban_members", "create_instant_invite": "create_instant_invite", "view_channels": "view_channel", "view_channel": "view_channel", "send_messages": "send_messages", "send_tts_messages": "send_tts_messages", "embed_links": "embed_links", "attach_files": "attach_files", "read_message_history": "read_message_history", "mention_everyone": "mention_everyone", "use_external_emojis": "external_emojis", "external_emojis": "external_emojis", "add_reactions": "add_reactions", "connect": "connect", "speak": "speak", "mute_members": "mute_members", "deafen_members": "deafen_members", "move_members": "move_members", "use_voice_activation": "use_voice_activation", "priority_speaker": "priority_speaker", "stream": "stream", "change_nickname": "change_nickname", "manage_nicknames": "manage_nicknames", "use_application_commands": "use_application_commands", "request_to_speak": "request_to_speak", "manage_events": "manage_events", "manage_threads": "manage_threads", "create_public_threads": "create_public_threads", "create_private_threads": "create_private_threads", "use_external_stickers": "external_stickers", "send_messages_in_threads": "send_messages_in_threads", "use_embedded_activities": "use_embedded_activities", "moderate_members": "moderate_members" } for perm in permission_list: # Convert to lowercase and handle variations perm_lower = perm.lower().replace(" ", "_").replace("-", "_") # Map the permission discord_perm = permission_mapping.get(perm_lower, perm_lower) if hasattr(permissions, discord_perm): setattr(permissions, discord_perm, True) return permissions
  • Utility function that converts a hex color string (e.g., '#ff0000') from tool arguments to a discord.Color object. Used in the create_role handler for setting role color.
    def hex_to_color(hex_str: str) -> discord.Color: """Convert hex color string to discord.Color""" if not hex_str: return discord.Color.default() # Remove # if present if hex_str.startswith('#'): hex_str = hex_str[1:] try: # Convert hex to integer color_int = int(hex_str, 16) return discord.Color(color_int) except ValueError: # Return default color if conversion fails return discord.Color.default()

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/wowjinxy/mcp-discord'

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