assign_issue
Assign issues to specific users in Redmine by specifying issue ID and user details (ID, name, or login). Add optional notes for clarity and receive confirmation of the assignment.
Instructions
指派議題給用戶
Args:
issue_id: 議題 ID
user_id: 指派給的用戶 ID(與 user_name/user_login 三選一)
user_name: 指派給的用戶姓名(與 user_id/user_login 三選一)
user_login: 指派給的用戶登入名(與 user_id/user_name 三選一)
notes: 指派備註(可選)
Returns:
指派結果訊息
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | ||
| notes | No | ||
| user_id | No | ||
| user_login | No | ||
| user_name | No |
Implementation Reference
- src/redmine_mcp/server.py:741-810 (handler)The core handler function for the 'assign_issue' MCP tool, decorated with @mcp.tool(). It handles assigning or unassigning a Redmine issue to a user by ID, name, or login, updates the issue via the Redmine client, and returns a formatted success or error message. The schema is inferred from type hints and docstring.@mcp.tool() def assign_issue(issue_id: int, user_id: int = None, user_name: str = None, user_login: str = None, notes: str = "") -> str: """ 指派議題給用戶 Args: issue_id: 議題 ID user_id: 指派給的用戶 ID(與 user_name/user_login 三選一) user_name: 指派給的用戶姓名(與 user_id/user_login 三選一) user_login: 指派給的用戶登入名(與 user_id/user_name 三選一) notes: 指派備註(可選) Returns: 指派結果訊息 """ try: client = get_client() # 處理用戶參數 final_user_id = user_id if user_name: final_user_id = client.find_user_id_by_name(user_name) if not final_user_id: users = client.get_available_users() return f"找不到用戶姓名:「{user_name}」\n\n可用用戶(姓名):\n" + "\n".join([f"- {name}" for name in users['by_name'].keys()]) elif user_login: final_user_id = client.find_user_id_by_login(user_login) if not final_user_id: users = client.get_available_users() return f"找不到用戶登入名:「{user_login}」\n\n可用用戶(登入名):\n" + "\n".join([f"- {login}" for login in users['by_login'].keys()]) # 準備更新資料 update_data = {} if final_user_id is not None: update_data['assigned_to_id'] = final_user_id action_text = f"指派給用戶 ID {final_user_id}" else: update_data['assigned_to_id'] = None action_text = "取消指派" if notes.strip(): update_data['notes'] = notes.strip() # 執行更新 client.update_issue(issue_id, **update_data) # 取得更新後的議題資訊 updated_issue = client.get_issue(issue_id) assignee_name = "未指派" if updated_issue.assigned_to: assignee_name = updated_issue.assigned_to.get('name', f"用戶 ID {user_id}") result = f"""議題指派更新成功! 議題: #{issue_id} - {updated_issue.subject} 動作: {action_text} 目前指派給: {assignee_name}""" if notes.strip(): result += f"\n備註: {notes}" return result except RedmineAPIError as e: return f"指派議題失敗: {str(e)}" except Exception as e: return f"系統錯誤: {str(e)}"