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