refresh_cache
Manually refresh enumerated values and user caches on the Redmine MCP Server to ensure up-to-date data for issue management and project operations.
Instructions
手動刷新列舉值和用戶快取
Returns:
刷新結果訊息
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Input Schema (JSON Schema)
{
"properties": {},
"title": "refresh_cacheArguments",
"type": "object"
}
Implementation Reference
- src/redmine_mcp/server.py:1166-1207 (handler)The main MCP tool handler for 'refresh_cache'. Decorated with @mcp.tool(), it calls the RedmineClient's refresh_cache method, reloads the cache, and returns formatted statistics about the refreshed cache contents.@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)}"
- Core helper method implementing the cache refresh logic. Fetches priorities, statuses, trackers, time activities, and users from Redmine API, builds name-to-ID mappings, stores in _enum_cache, and persists to JSON file.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': {} }
- Public method on RedmineClient that triggers cache refresh by calling the private _refresh_enum_cache method. Called by the MCP tool handler.def refresh_cache(self): """手動刷新快取""" self._refresh_enum_cache()
- src/redmine_mcp/server.py:1166-1166 (registration)The @mcp.tool() decorator registers the refresh_cache function as an MCP tool.@mcp.tool()