AiDD MCP Server

import json from pathlib import Path # Global state management class GlobalState: def __init__(self): self.config_dir = Path.home() / '.aidd' self.config_file = self.config_dir / 'config.json' self._ensure_config_dir() def _ensure_config_dir(self): """Ensure the config directory exists.""" self.config_dir.mkdir(exist_ok=True) def _load_config(self) -> dict: """Load the config file.""" if not self.config_file.exists(): return {} try: with open(self.config_file, 'r') as f: return json.load(f) except (json.JSONDecodeError, OSError): return {} def _save_config(self, config: dict): """Save the config file.""" try: with open(self.config_file, 'w') as f: json.dump(config, f, indent=2, sort_keys=True) except OSError: pass # Silently fail if we can't write the config @property def allowed_directory(self) -> str: """Get the allowed directory, falling back to Desktop if not set.""" config = self._load_config() return config.get('allowed_directory', str(Path.home() / "Desktop")) @allowed_directory.setter def allowed_directory(self, value: str): """Set the allowed directory and persist it.""" self._save_config({'allowed_directory': value}) # Single instance to be shared across modules state = GlobalState()