"""CLI entry point for SSO MCP Server.
This module provides the main entry point when running the package
as a module: python -m sso_mcp_server or via the sso-mcp-server command.
"""
from __future__ import annotations
import argparse
import sys
def parse_args(args: list[str] | None = None) -> argparse.Namespace:
"""Parse command-line arguments.
Args:
args: Command-line arguments (defaults to sys.argv[1:]).
Returns:
Parsed arguments namespace.
"""
parser = argparse.ArgumentParser(
prog="sso-mcp-server",
description="MCP server providing development checklists with Azure SSO authentication",
)
parser.add_argument(
"--port",
type=int,
default=None,
help="Port to run the MCP server on (overrides MCP_PORT env var)",
)
parser.add_argument(
"--checklist-dir",
type=str,
default=None,
help="Directory containing checklist files (overrides CHECKLIST_DIR env var)",
)
parser.add_argument(
"--log-level",
choices=["DEBUG", "INFO", "WARNING", "ERROR"],
default=None,
help="Logging level (overrides LOG_LEVEL env var)",
)
parser.add_argument(
"--version",
action="store_true",
help="Show version and exit",
)
return parser.parse_args(args)
def main(args: list[str] | None = None) -> int:
"""Main entry point for the SSO MCP Server.
Args:
args: Command-line arguments (defaults to sys.argv[1:]).
Returns:
Exit code (0 for success, non-zero for errors).
"""
parsed = parse_args(args)
if parsed.version:
from sso_mcp_server import __version__
print(f"sso-mcp-server {__version__}")
return 0
# Import after argument parsing to avoid slow startup for --help/--version
import os
from sso_mcp_server import configure_logging, get_logger
from sso_mcp_server.config import ConfigurationError, Settings, reset_settings
# Override environment variables with CLI arguments
if parsed.port:
os.environ["MCP_PORT"] = str(parsed.port)
if parsed.checklist_dir:
os.environ["CHECKLIST_DIR"] = parsed.checklist_dir
if parsed.log_level:
os.environ["LOG_LEVEL"] = parsed.log_level
# Reset settings to pick up new environment variables
reset_settings()
try:
# Load and validate settings
settings = Settings.from_env()
# Configure logging
configure_logging(settings.log_level)
logger = get_logger("main")
logger.info(
"starting_mcp_server",
port=settings.mcp_port,
checklist_dir=str(settings.checklist_dir),
log_level=settings.log_level,
)
# Import and run server
from sso_mcp_server.server import run_server
run_server(settings)
return 0
except ConfigurationError as e:
print(f"\nConfiguration Error: {e.message}", file=sys.stderr)
if e.action:
print(f" Action: {e.action}", file=sys.stderr)
print("\nSee docs/quickstart.md for configuration help.", file=sys.stderr)
return 1
except KeyboardInterrupt:
print("\nServer stopped by user")
return 0
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())