list_members
Retrieve and display members from a Discord server, with options to filter bots and set result limits.
Instructions
List members of a Discord server.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| server_id | No | ||
| limit | No | ||
| include_bots | No |
Implementation Reference
- Implements the core logic for listing server members, fetching up to a specified limit, categorizing humans/bots, and formatting with roles and join dates.async def handle_list_members(discord_client, arguments: Dict[str, Any]) -> List[TextContent]: """List server members""" guild = await discord_client.fetch_guild(int(arguments["server_id"])) limit = min(int(arguments.get("limit", 50)), 1000) members_info = [] count = 0 async for member in guild.fetch_members(limit=limit): if count >= limit: break roles = [role.name for role in member.roles if role.name != "@everyone"] members_info.append({ "name": member.display_name, "username": str(member), "id": member.id, "joined": member.joined_at.strftime('%Y-%m-%d') if member.joined_at else "Unknown", "roles": roles, "is_bot": member.bot }) count += 1 # Format the member list member_list = [] humans = 0 bots = 0 for member in members_info: if member["is_bot"]: bots += 1 member_type = "🤖" else: humans += 1 member_type = "👤" roles_str = ", ".join(member["roles"][:3]) # Limit to first 3 roles if len(member["roles"]) > 3: roles_str += f" (+{len(member['roles'])-3} more)" member_list.append( f"{member_type} **{member['name']}** ({member['username']})\n" f" Joined: {member['joined']} | Roles: {roles_str or 'None'}" ) result = f"""**Members in {guild.name}** (Showing {len(members_info)} of {guild.member_count}) **Summary:** {humans} humans, {bots} bots {chr(10).join(member_list)}""" return [TextContent(type="text", text=result)]
- src/discord_mcp/integrated_server.py:658-677 (registration)Registers the 'list_members' tool in the MCP server with its name, description, and input schema definition.Tool( name="list_members", description="Get a list of members in a server with roles and activity", 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"] } ),
- Defines the input schema for the list_members tool, specifying server_id as required and optional limit parameter.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"] } ),
- src/discord_mcp/integrated_server.py:1021-1032 (registration)Routing logic in call_tool that dispatches list_members to CoreToolHandlers.handle_list_members when the tool name matches.core_tool_names = [ "get_server_info", "list_servers", "get_channels", "list_members", "get_user_info", "send_message", "read_messages", "add_reaction", "add_multiple_reactions", "remove_reaction", "moderate_message", "create_text_channel", "delete_channel", "add_role", "remove_role" ] if name in core_tool_names: handler_method = f"handle_{name}" if hasattr(CoreToolHandlers, handler_method): return await getattr(CoreToolHandlers, handler_method)(discord_client, arguments)