Skip to main content
Glama
snowild

Redmine MCP Server

by snowild

assign_issue

Assign Redmine issues to specific users by providing issue ID and user identifier, with optional assignment notes for tracking.

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
NameRequiredDescriptionDefault
issue_idYes
user_idNo
user_nameNo
user_loginNo
notesNo

Implementation Reference

  • The primary handler function for the 'assign_issue' tool. Decorated with @mcp.tool() for registration. Resolves user by ID, name, or login using Redmine client methods, updates the issue's assigned_to_id, adds optional notes, and returns a formatted success message with current assignee info.
    @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)}"
  • The @mcp.tool() decorator registers the assign_issue function as an MCP tool.
    @mcp.tool()
  • Docstring providing the tool description, parameters (issue_id, user_id/name/login, notes), and return format, which serves as the input/output schema for MCP.
    """ 指派議題給用戶 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: 指派結果訊息 """

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/snowild/redmine-mcp'

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