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
This commit is contained in:
谢栋梁
2025-09-02 08:55:25 +08:00
parent 93ce6987b6
commit d34c299f02

View File

@@ -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