MCPcopy Create free account
hub / github.com/IBM/mcp-cli / PreferenceManager

Class PreferenceManager

src/mcp_cli/utils/preferences.py:188–720  ·  view source on GitHub ↗

Manages MCP CLI preferences with file persistence.

Source from the content-addressed store, hash-verified

186
187
188class PreferenceManager:
189 """Manages MCP CLI preferences with file persistence."""
190
191 def __init__(self, config_dir: Path | None = None):
192 """Initialize preference manager.
193
194 Args:
195 config_dir: Optional custom config directory, defaults to ~/.mcp-cli
196 """
197 self.config_dir = config_dir or Path(DEFAULT_CONFIG_DIR).expanduser()
198 self.config_dir.mkdir(parents=True, exist_ok=True)
199 self.preferences_file = self.config_dir / "preferences.json"
200 self.preferences = self.load_preferences()
201
202 def load_preferences(self) -> MCPPreferences:
203 """Load preferences from file or create defaults."""
204 if self.preferences_file.exists():
205 try:
206 with open(self.preferences_file, "r") as f:
207 data = json.load(f)
208 return MCPPreferences.from_dict(data)
209 except (json.JSONDecodeError, KeyError, ValueError):
210 # If preferences are corrupted or invalid, backup and create new
211 backup_file = self.preferences_file.with_suffix(".json.backup")
212 self.preferences_file.rename(backup_file)
213 return MCPPreferences()
214 return MCPPreferences()
215
216 def save_preferences(self) -> None:
217 """Save preferences to file."""
218 with open(self.preferences_file, "w") as f:
219 json.dump(self.preferences.to_dict(), f, indent=2)
220
221 def get_theme(self) -> str:
222 """Get current theme."""
223 return self.preferences.ui.theme
224
225 def set_theme(self, theme: str) -> None:
226 """Set and persist theme.
227
228 Args:
229 theme: Theme name to set
230
231 Raises:
232 ValueError: If theme is not valid
233 """
234 try:
235 theme_enum = Theme(theme)
236 except ValueError:
237 valid_themes = [t.value for t in Theme]
238 raise ValueError(
239 f"Invalid theme: {theme}. Valid themes are: {', '.join(valid_themes)}"
240 )
241
242 self.preferences.ui.theme = theme_enum
243 self.save_preferences()
244
245 def get_verbose(self) -> bool:

Calls

no outgoing calls