Skip to main content
Glama

Things MCP Server

by excelsier
config.py3.69 kB
""" Configuration module for Things MCP. Stores settings and user-specific configuration values. """ import os import json import logging from pathlib import Path logger = logging.getLogger(__name__) # Default configuration values DEFAULT_CONFIG = { "things_auth_token": "", # Empty by default, must be set by user "retry_attempts": 3, "retry_delay": 1.0 } # Path to the configuration file CONFIG_DIR = Path.home() / ".things-mcp" CONFIG_FILE = CONFIG_DIR / "config.json" # Global configuration dictionary _config = None def load_config(): """Load configuration from file, create with defaults if it doesn't exist.""" global _config # Create config directory if it doesn't exist if not CONFIG_DIR.exists(): try: CONFIG_DIR.mkdir(parents=True) logger.info(f"Created configuration directory: {CONFIG_DIR}") except Exception as e: logger.error(f"Failed to create config directory: {e}") return DEFAULT_CONFIG # Check if config file exists if not CONFIG_FILE.exists(): # Create default config file try: with open(CONFIG_FILE, 'w') as f: json.dump(DEFAULT_CONFIG, f, indent=2) logger.info(f"Created default configuration file: {CONFIG_FILE}") _config = DEFAULT_CONFIG.copy() except Exception as e: logger.error(f"Failed to create config file: {e}") _config = DEFAULT_CONFIG.copy() else: # Load existing config try: with open(CONFIG_FILE, 'r') as f: loaded_config = json.load(f) # Ensure all required keys are present _config = DEFAULT_CONFIG.copy() _config.update(loaded_config) logger.info(f"Loaded configuration from: {CONFIG_FILE}") except Exception as e: logger.error(f"Failed to load config file: {e}") _config = DEFAULT_CONFIG.copy() return _config def save_config(): """Save current configuration to file.""" if _config is None: logger.error("Cannot save config: No configuration loaded") return False try: with open(CONFIG_FILE, 'w') as f: json.dump(_config, f, indent=2) logger.info(f"Saved configuration to: {CONFIG_FILE}") return True except Exception as e: logger.error(f"Failed to save config: {e}") return False def get_config(): """Get the current configuration, loading it if necessary.""" global _config if _config is None: _config = load_config() return _config def set_config_value(key, value): """Set a configuration value and save to file.""" config = get_config() config[key] = value return save_config() def get_config_value(key, default=None): """Get a configuration value, return default if not found.""" config = get_config() return config.get(key, default) def get_things_auth_token(): """Get the Things authentication token. First checks environment variable THINGS_AUTH_TOKEN, then falls back to config file. """ # Check environment variable first token = os.environ.get('THINGS_AUTH_TOKEN') if token: logger.debug("Using Things auth token from environment variable") return token # Fall back to config file return get_config_value("things_auth_token", "") def set_things_auth_token(token): """Set the Things authentication token.""" return set_config_value("things_auth_token", token) # Initialize configuration on module import load_config()

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/excelsier/things-fastmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server