Skip to main content
Glama

list_users

Retrieve all users within a ClickUp workspace. Specify a workspace ID or use the default to manage team access and collaboration effectively.

Instructions

List all users in the workspace

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
workspace_idNoWorkspace ID (optional, uses default if not provided)

Implementation Reference

  • The handler function that implements the core logic of the 'list_users' tool by calling the ClickUp client's get_workspace_members method and formatting the response.
    async def list_users(self, workspace_id: Optional[str] = None) -> Dict[str, Any]: """List all users in the workspace.""" members = await self.client.get_workspace_members(workspace_id) return { "users": [ { "id": member.get("id"), "username": member.get("username"), "email": member.get("email"), "initials": member.get("initials"), "color": member.get("color"), "profilePicture": member.get("profilePicture"), } for member in members ], "count": len(members), }
  • The input schema definition for the 'list_users' tool, specifying optional workspace_id parameter.
    # User management tools Tool( name="list_users", description="List all users in the workspace", inputSchema={ "type": "object", "properties": { "workspace_id": { "type": "string", "description": "Workspace ID (optional, uses default if not provided)", }, }, }, ),
  • Registration of the 'list_users' handler in the ClickUpTools class's tool dictionary, mapping the tool name to its implementation method.
    self._tools: Dict[str, Callable] = { "create_task": self.create_task, "get_task": self.get_task, "update_task": self.update_task, "delete_task": self.delete_task, "list_tasks": self.list_tasks, "search_tasks": self.search_tasks, "get_subtasks": self.get_subtasks, "get_task_comments": self.get_task_comments, "create_task_comment": self.create_task_comment, "get_task_status": self.get_task_status, "update_task_status": self.update_task_status, "get_assignees": self.get_assignees, "assign_task": self.assign_task, "list_spaces": self.list_spaces, "list_folders": self.list_folders, "list_lists": self.list_lists, "find_list_by_name": self.find_list_by_name, # Bulk operations "bulk_update_tasks": self.bulk_update_tasks, "bulk_move_tasks": self.bulk_move_tasks, # Time tracking "get_time_tracked": self.get_time_tracked, "log_time": self.log_time, # Templates "create_task_from_template": self.create_task_from_template, "create_task_chain": self.create_task_chain, # Analytics "get_team_workload": self.get_team_workload, "get_task_analytics": self.get_task_analytics, # User management "list_users": self.list_users, "get_current_user": self.get_current_user, "find_user_by_name": self.find_user_by_name, }
  • Supporting utility method in ClickUpClient that fetches workspace members from multiple API endpoints with fallbacks, used by the list_users tool handler.
    async def get_workspace_members( self, workspace_id: Optional[str] = None ) -> List[Dict[str, Any]]: """Get all members of a workspace. Note: This endpoint requires the workspace to be on an Enterprise plan for full functionality. For non-Enterprise plans, it may return limited data. """ workspace_id = workspace_id or self.config.default_workspace_id if not workspace_id: workspaces = await self.get_workspaces() if not workspaces: raise ClickUpAPIError("No workspaces found") workspace_id = workspaces[0].id # First try the groups endpoint which is more widely available try: data = await self._request("GET", "/group") groups = data.get("groups", []) # Extract unique members from all groups members_dict = {} for group in groups: for member in group.get("members", []): user_id = member.get("id") if user_id and user_id not in members_dict: # Ensure consistent user format user_data = { "id": member.get("id"), "username": member.get("username"), "email": member.get("email"), "initials": member.get("initials"), "color": member.get("color"), "profilePicture": member.get("profilePicture"), } members_dict[user_id] = user_data if members_dict: return list(members_dict.values()) except ClickUpAPIError: logger.warning("Groups endpoint failed, trying other endpoints") # Try the team endpoint which might have member information try: data = await self._request("GET", f"/team/{workspace_id}") team = data.get("team", {}) members = team.get("members", []) # Format members consistently formatted_members = [] for member in members: if isinstance(member, dict): # Handle nested user structure if "user" in member: user_data = member["user"] else: user_data = member formatted_member = { "id": user_data.get("id"), "username": user_data.get("username"), "email": user_data.get("email"), "initials": user_data.get("initials"), "color": user_data.get("color"), "profilePicture": user_data.get("profilePicture"), } formatted_members.append(formatted_member) if formatted_members: return formatted_members except ClickUpAPIError: logger.warning("Team endpoint also failed") # Final fallback: get current user and return as single-item list try: current_user = await self.get_current_user() return [ { "id": current_user.get("id"), "username": current_user.get("username"), "email": current_user.get("email"), "initials": current_user.get("initials"), "color": current_user.get("color"), "profilePicture": current_user.get("profilePicture"), } ] except ClickUpAPIError: logger.warning("Unable to fetch any workspace members") return []

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/DiversioTeam/clickup-mcp'

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