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:
36
server.py
36
server.py
@@ -31,33 +31,27 @@ from typing import Any, Optional
|
|||||||
# Try to load environment variables from .env file if dotenv is available
|
# Try to load environment variables from .env file if dotenv is available
|
||||||
# This is optional - environment variables can still be passed directly
|
# This is optional - environment variables can still be passed directly
|
||||||
try:
|
try:
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv, dotenv_values
|
||||||
|
|
||||||
# Load environment variables from .env file in the script's directory
|
# Load environment variables from .env file in the script's directory
|
||||||
# This ensures .env is loaded regardless of the current working directory
|
# This ensures .env is loaded regardless of the current working directory
|
||||||
script_dir = Path(__file__).parent
|
script_dir = Path(__file__).parent
|
||||||
env_file = script_dir / ".env"
|
env_file = script_dir / ".env"
|
||||||
|
|
||||||
# First load only to read ZEN_MCP_FORCE_ENV_OVERRIDE, then reload with proper override setting
|
# 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
|
# Use a temporary environment to read just this configuration variable
|
||||||
temp_env = {}
|
temp_env = {}
|
||||||
if env_file.exists():
|
if env_file.exists():
|
||||||
from dotenv import dotenv_values
|
|
||||||
temp_env = dotenv_values(env_file)
|
temp_env = dotenv_values(env_file)
|
||||||
|
|
||||||
# Check if we should force override based on .env file content (not system env)
|
# 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 .env file with appropriate override setting
|
||||||
load_dotenv(dotenv_path=env_file, override=force_override)
|
load_dotenv(dotenv_path=env_file, override=force_override)
|
||||||
|
|
||||||
# Log the configuration choice
|
# Store override setting for logging after logger is configured
|
||||||
logger = logging.getLogger(__name__)
|
_zen_mcp_force_override = force_override
|
||||||
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")
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# dotenv not available - this is fine, environment variables can still be passed directly
|
# dotenv not available - this is fine, environment variables can still be passed directly
|
||||||
# This commonly happens when running via uvx or in minimal environments
|
# This commonly happens when running via uvx or in minimal environments
|
||||||
@@ -183,6 +177,20 @@ except Exception as e:
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
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
|
# 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
|
# This name is used by MCP clients to identify and connect to this specific server
|
||||||
|
|||||||
Reference in New Issue
Block a user