"""Entry point for Opinion.trade MCP server."""
import asyncio
import logging
import sys
from .config import OpinionConfig
from .server import run_server
def setup_logging():
"""Configure logging for the MCP server."""
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[logging.StreamHandler(sys.stderr)]
)
async def async_main():
"""Async main function to run the MCP server."""
setup_logging()
logger = logging.getLogger(__name__)
try:
# Load configuration from environment
config = OpinionConfig.from_env()
logger.info(f"Configuration loaded: {config.get_mode_description()}")
# Run the MCP server
await run_server(config)
except ValueError as e:
logger.error(f"Configuration error: {e}")
logger.error("Please check your .env file and ensure OPINION_API_KEY is set.")
sys.exit(1)
except Exception as e:
logger.error(f"Server error: {e}", exc_info=True)
sys.exit(1)
def main():
"""Main entry point for the MCP server."""
try:
asyncio.run(async_main())
except KeyboardInterrupt:
logging.info("Server stopped by user")
except Exception as e:
logging.error(f"Fatal error: {e}", exc_info=True)
sys.exit(1)
if __name__ == "__main__":
main()