From d34c299f02a233af4f17bdcc848219bf07799723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=A0=8B=E6=A2=81?= Date: Tue, 2 Sep 2025 08:55:25 +0800 Subject: [PATCH] fix: resolve logging timing and import organization issues - Move dotenv_values import to top level with load_dotenv - Fix logging sequence issue by deferring ZEN_MCP_FORCE_ENV_OVERRIDE logs until after logger configuration - Apply Black formatting to ensure consistent code style --- server.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/server.py b/server.py index 5cda526..3a54afd 100644 --- a/server.py +++ b/server.py @@ -31,33 +31,27 @@ from typing import Any, Optional # Try to load environment variables from .env file if dotenv is available # This is optional - environment variables can still be passed directly try: - from dotenv import load_dotenv + from dotenv import load_dotenv, dotenv_values # Load environment variables from .env file in the script's directory # This ensures .env is loaded regardless of the current working directory script_dir = Path(__file__).parent env_file = script_dir / ".env" - + # First load only to read ZEN_MCP_FORCE_ENV_OVERRIDE, then reload with proper override setting # Use a temporary environment to read just this configuration variable temp_env = {} if env_file.exists(): - from dotenv import dotenv_values temp_env = dotenv_values(env_file) - + # Check if we should force override based on .env file content (not system env) - force_override = temp_env.get('ZEN_MCP_FORCE_ENV_OVERRIDE', 'false').lower() == 'true' - + force_override = temp_env.get("ZEN_MCP_FORCE_ENV_OVERRIDE", "false").lower() == "true" + # Load .env file with appropriate override setting load_dotenv(dotenv_path=env_file, override=force_override) - - # Log the configuration choice - logger = logging.getLogger(__name__) - if force_override: - logger.info("ZEN_MCP_FORCE_ENV_OVERRIDE enabled - .env file values will override system environment variables") - logger.debug("Environment override prevents conflicts between different AI tools passing cached API keys") - else: - logger.debug("ZEN_MCP_FORCE_ENV_OVERRIDE disabled - system environment variables take precedence") + + # Store override setting for logging after logger is configured + _zen_mcp_force_override = force_override except ImportError: # dotenv not available - this is fine, environment variables can still be passed directly # This commonly happens when running via uvx or in minimal environments @@ -183,6 +177,20 @@ except Exception as e: logger = logging.getLogger(__name__) +# Log ZEN_MCP_FORCE_ENV_OVERRIDE configuration if it was set during dotenv loading +try: + if "_zen_mcp_force_override" in globals(): + if _zen_mcp_force_override: + logger.info( + "ZEN_MCP_FORCE_ENV_OVERRIDE enabled - .env file values will override system environment variables" + ) + logger.debug("Environment override prevents conflicts between different AI tools passing cached API keys") + else: + logger.debug("ZEN_MCP_FORCE_ENV_OVERRIDE disabled - system environment variables take precedence") +except NameError: + # _zen_mcp_force_override not defined, which means dotenv wasn't available or no .env file + pass + # Create the MCP server instance with a unique name identifier # This name is used by MCP clients to identify and connect to this specific server