Skip to main content
Glama
snowild

Redmine MCP Server

by snowild

refresh_cache

Manually refresh enumeration values and user caches in Redmine to ensure data consistency and resolve synchronization issues.

Instructions

手動刷新列舉值和用戶快取

Returns:
    刷新結果訊息

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • MCP tool handler for 'refresh_cache'. Calls RedmineClient.refresh_cache(), reloads cache info, and returns formatted status report with cache statistics.
    @mcp.tool()
    def refresh_cache() -> str:
        """
        手動刷新列舉值和用戶快取
        
        Returns:
            刷新結果訊息
        """
        try:
            client = get_client()
            client.refresh_cache()
            
            # 取得快取資訊
            cache = client._load_enum_cache()
            domain = cache.get('domain', 'N/A')
            cache_time = cache.get('cache_time', 0)
            
            if cache_time > 0:
                cache_datetime = datetime.fromtimestamp(cache_time).strftime('%Y-%m-%d %H:%M:%S')
            else:
                cache_datetime = 'N/A'
            
            result = f"""快取刷新成功!
    
    Domain: {domain}
    快取時間: {cache_datetime}
    
    快取內容統計:
    - 優先權: {len(cache.get('priorities', {}))} 個
    - 狀態: {len(cache.get('statuses', {}))} 個  
    - 追蹤器: {len(cache.get('trackers', {}))} 個
    - 用戶(姓名): {len(cache.get('users_by_name', {}))} 個
    - 用戶(登入名): {len(cache.get('users_by_login', {}))} 個
    
    快取位置: {client._cache_file}"""
            
            return result
            
        except RedmineAPIError as e:
            return f"刷新快取失敗: {str(e)}"
        except Exception as e:
            return f"系統錯誤: {str(e)}"
  • RedmineClient.refresh_cache() method invoked by the tool handler to trigger cache refresh.
    def refresh_cache(self):
        """手動刷新快取"""
        self._refresh_enum_cache()
  • Core cache refresh logic: Fetches priorities, statuses, trackers, time activities, and users from Redmine API; builds name-to-ID mappings; saves to JSON file in ~/.redmine_mcp.
    def _refresh_enum_cache(self):
        """刷新列舉值快取"""
        try:
            # 取得所有列舉值
            priorities = self.get_priorities()
            statuses = self.get_issue_statuses()
            trackers = self.get_trackers()
            time_entry_activities = self.get_time_entry_activities()
            
            # 取得用戶列表(限制100個避免太大)
            users = self.list_users(limit=100)
            
            # 建立名稱到ID的對應
            user_by_name = {}
            user_by_login = {}
            for user in users:
                full_name = f"{user.firstname} {user.lastname}".strip()
                if full_name:
                    user_by_name[full_name] = user.id
                user_by_login[user.login] = user.id
            
            self._enum_cache = {
                'cache_time': datetime.now().timestamp(),
                'domain': self.config.redmine_domain,
                'priorities': {item['name']: item['id'] for item in priorities},
                'statuses': {item['name']: item['id'] for item in statuses},
                'trackers': {item['name']: item['id'] for item in trackers},
                'time_entry_activities': {item['name']: item['id'] for item in time_entry_activities},
                'users_by_name': user_by_name,
                'users_by_login': user_by_login
            }
            
            # 儲存到檔案
            with open(self._cache_file, 'w', encoding='utf-8') as f:
                json.dump(self._enum_cache, f, ensure_ascii=False, indent=2)
                
        except Exception as e:
            # 快取刷新失敗,使用空快取
            self._enum_cache = {
                'cache_time': 0, 
                'domain': self.config.redmine_domain,
                'priorities': {}, 
                'statuses': {}, 
                'trackers': {},
                'time_entry_activities': {},
                'users_by_name': {},
                'users_by_login': {}
            }

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