list_users
Retrieve and filter active or locked users from Redmine project management systems, with optional limit settings for results, displayed in a table format.
Instructions
列出所有用戶
Args:
limit: 最大回傳數量 (預設 20,最大 100)
status_filter: 狀態篩選 ("active", "locked", "all")
Returns:
用戶列表,以表格格式呈現
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status_filter | No | active |
Implementation Reference
- src/redmine_mcp/server.py:1071-1117 (handler)Primary MCP tool handler and registration for 'list_users'. Decorated with @mcp.tool(), handles input parameters, maps status_filter to status code, calls RedmineClient.list_users(), formats output as a table string.@mcp.tool() def list_users(limit: int = 20, status_filter: str = "active") -> str: """ 列出所有用戶 Args: limit: 最大回傳數量 (預設 20,最大 100) status_filter: 狀態篩選 ("active", "locked", "all") Returns: 用戶列表,以表格格式呈現 """ try: client = get_client() limit = min(max(limit, 1), 100) # 轉換狀態篩選 status = None if status_filter == "active": status = 1 elif status_filter == "locked": status = 3 users = client.list_users(limit=limit, status=status) if not users: return "沒有找到用戶" result = f"找到 {len(users)} 個用戶:\n\n" result += f"{'ID':<5} {'登入名':<15} {'姓名':<20} {'Email':<25} {'狀態':<8}\n" result += f"{'-'*5} {'-'*15} {'-'*20} {'-'*25} {'-'*8}\n" for user in users: full_name = f"{user.firstname} {user.lastname}".strip() if not full_name: full_name = user.login status_text = "啟用" if user.status == 1 else "停用" email = user.mail[:22] + "..." if len(user.mail) > 25 else user.mail result += f"{user.id:<5} {user.login:<15} {full_name:<20} {email:<25} {status_text:<8}\n" return result except RedmineAPIError as e: return f"取得用戶列表失敗: {str(e)}" except Exception as e: return f"系統錯誤: {str(e)}"
- RedmineClient.list_users() helper method. Performs GET /users.json API call with limit/offset/status params, parses response into list of RedmineUser dataclasses.def list_users(self, limit: int = 20, offset: int = 0, status: int = None) -> List[RedmineUser]: """列出用戶""" params = { 'limit': min(max(limit, 1), 100), 'offset': max(offset, 0) } if status is not None: params['status'] = status response = self._make_request('GET', '/users.json', params=params) users = [] for user_data in response.get('users', []): users.append(RedmineUser( id=user_data['id'], login=user_data['login'], firstname=user_data.get('firstname', ''), lastname=user_data.get('lastname', ''), mail=user_data.get('mail', ''), status=user_data.get('status', 1), created_on=user_data.get('created_on'), last_login_on=user_data.get('last_login_on') )) return users
- RedmineUser dataclass defining the structure for user objects returned by list_users.class RedmineUser: """Redmine 用戶數據結構""" id: int login: str firstname: str lastname: str mail: str status: int created_on: Optional[str] = None last_login_on: Optional[str] = None